cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
12 août 2006 à 14:21
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
26 août 2006 à 10:35
Bonjour,
Je ne parviens pas à utiliser une fiche dans une dll possédant un GroupBox utilisée dans une appli utilisant le thème XP.
(Rien n'est optionnel dans la phrase ci-dessus : certains composants ne posent pas de problèmes, pas de problèmes non plus sans thème XP...)
Une exception (violation d'accès) à lieu à la fermeture de l'application (Autrement dit bien après la destruction théorique de la fiche).
Je vais décrire la procédure pas à pas pour aboutir à ce problème :
1 Démarrer un projet à partir de l'expert dll.
2 Cliquer sur nouvelle fiche, puis renommer :
L'unité en Unit2.
La form en Form2 à partir de l'inpecteur d'objet (La classe sera renommée TForm2 automatiquement).
9 Double cliquer sur le bouton pour implémenter ça :
//--------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
allo;
end;
//--------------------------------------------------------
10 Sauvegarder et compiler. On peut le faire dans le même répertoire que celui de la dll sans problème a priori.
11 Executer l'appli.
12 Cliquer sur le bouton de la fiche.
La deuxième form s'affichera correctement, avec sa groupbox.
Sa fermeture par la croix devrait se passer sans problème elle aussi.
C'est la fermeture de la form de l'appli qui devrait être anormalement longue pour aboutir à ce message :
Le projet ... a provoqué trop d'exceptions consécutives : 'access violation at 0x003330de: read of address 0x00953e38'.
Snif.
Voilou voilou.
A noter que si on retire le composant XPManifest, l'appli reste XP. Il faut supprimer l'unité XPMan de la clause uses pour revenir à une appli normale (qui fonctionnera tout à fait correctement).
Le fait de ne pas libérer la fiche (En n'appelant pas Release) ne change rien.
Le fait d'ajouter un composant XPManifest sur la fiche de la dll ne change rien.
Le fait d'utiliser la méthode CreateForm de l'objet Application pour créer la fiche ne change rien.
A noter aussi que c'est le dessin du groupbox qui semble poser problème, en effet :
//--------------------------------------------------------
procedure allo(); stdcall;
begin
Form2:= TForm2.Create(nil);
Form2.GroupBox1.Visible:= False;
Form2.ShowModal;
Form2.Release;
end;
//--------------------------------------------------------
fonctionne parfaitement.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 24 août 2006 à 11:12
Yahuuuu !
Avant d'abandonner, j'ai quand même essayé d'en savoir un peu plus... Je me suis dit que charger et décharger la dll dynamiquement (Manuellement quoi) me permettrait par exemple de savoir si l'exception à lieu au déchargement de l'exe ou à celui de la dll...
Et là, très bonne surprise : pas d'exception !!!!!
Voilou voilou, donc fin du problème en ce qui me concerne !
PS :
Comme c'est très chiant de rédiger le code de chargement dynamique, j'ai fait une appli qui s'en charge.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 12 août 2006 à 17:12
Salut,
Le problème est connu et il n'y a pas de solution à ce jour.
Pour avoir moi-même longtemps cherché pourquoi une AV était déclenchée puis, sur le net, s'il existait une solution, je peux te donner comme conseil de laisser tomber.
Il et reste deux solutions :
1/- rapatrier ta fiche dans ton exe
2/- renoncer à l'utilisation des thèmes XP
Je crois me souvenir, mais là je ne suis plus trop sur de moi, que le problème persiste avec Delphi 2005.
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 12 août 2006 à 17:32
Alors là, Cirec, tu me scotches littéralement !
Je suis complétement passé à côté du code de Shining alors que je regarde tout (ou presque) ce qui passe sur DelphiFr.
Je viens de regarder son code et ça marche nickel !
Et dire que j'ai passé du temps à chercher comment régler ce problème alors que la solution était là, à portée de clic et en français !
Merci pour cette info.
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 12 août 2006 à 17:32
@ Delphiprog : Une petite fatigue peut être ?
J'ai fait le teste avec la source de Shining et ça fonctionne très bien ?
Il est vrai qu'il n'utilise pas la même méthode !
Essaye ça devrait fonctionner !
Si vous téléchargez la source après décompression il faut créer deux répertoires "\EXE" et "\DCU" dans le répertoire ou se trouve DllDemo.dpr, sinon il ne voudra pas compiler, et suivre les instructions dans LisezMoi.txt
Voilà c'est tout
@+
Cirec
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 16 août 2006 à 15:00
Houps, pardon cirec de pas avoir cherché... C'est que ces temps ci, je paye chaque minute de connexion... Ca me donne pas envie de m'éterniser... Merci pour le lien !
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 19 août 2006 à 21:24
Ah non alors !
Mon conseil a été donné faute de ne pas avoir connu la solution au moment où j'en avais le plus besoin.
Maintenant qu'on tient une solution viable, ce serait dommage de renoncer.
Avec quels composants rencontres-tu toujours le problème ?
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 23 août 2006 à 11:19
J'ai une exception à la fermeture de l'appli quand la fiche a au moins un des composants suivants, que ce soit avec le code ci-dessus ou avec le source du lien de cirec :
SpeedButton
RadioGroup
GroupBox
StringGrid
Et y en a certainement d'autre.
Le source de cirec, c'est plus comment faire des fiches MDI dans une dll (Ce qui n'était pas évident d'ailleurs) : elle ne résoud a priori rien en ce qui concerne le problème du thème XP.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 26 août 2006 à 10:35
Bah vi lol.
Met toi à ma place : si DelphiProg à pas trouvé, je vais pas chercher !
En tout cas c'est a priori que la dll est déchargée après une partie de l'exe, et que cette partie est nécessaire au déchargement de la dll. (Vut que si on décharge la dll manuellement puis l'exe, on a pas de problème).