Erreur mémoire à l'utilisation d'un DLL

cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 - 27 juin 2003 à 10:57
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 - 30 juin 2003 à 10:57
Bonjour !

Je viens de concevoir une petite dll. Celle-ci contient un certain nombre de fenetres, que l'ont peut appeler et manipuler et afficher de l'extérieur par le biais de routines que j'ai créé.
Tout va très bien, à ceci près que l'appel de certaines méthodes de la DLL provoque des erreurs mémoire. Ca arrive pas à toutes les méthodes que j'ai créé et ca arrive pas tout le temps non plus... Bref, je ne sais pas d'ou vient l'erreur. Ca plante dans le programme appelant et pas dans la dll, mais ca à un rapport quand même.....

Personne n'a eu cet étrange problème avant moi ?

Merci d'avance.

4 réponses

cs_kokonut Messages postés 17 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 27 mai 2005
27 juin 2003 à 14:28
Salut !

Le problème vient peut être du fait que tu n'alloue pas de
mémoire quand tu utilise certaines variables (par exemple
des PChar). Ce problème peut être résolu en utilisant les
fonctions GetMem et FreeMem je pense ... à toi d'identifier
où ça coince et où il vaudrait mieux utiliser une allocation
puis une désallocation mémoire. Si tu connais un peu le
C/C++ peut être que ce problème te sera déjà familier.

Bonne chance :big)

:shy) --- Kokonut ... lives in Delphi Heaven --- :shy)
Visit at www.jeux3d-intelligence-artificielle.com
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
27 juin 2003 à 15:18
En fait, toute mes fonctions marchent bien. J'ai déjà utilisé ma dll de facon dynamique, et je n'avais pas ces problèmes là. Mais depuis que j'utilise la méthode statique, ca merde.
Le problème, c'est que ca plante à un endroit bizarre :

Ca, c'est ma fonction qui est contenue dans un bouton (par exemple)

procedure BoutonMachin([.blablabla..])
begin

ProcedureDeMaDLL(paramètres);
AutreFonctionALaCon(EncoreDesParametres);
[...]

end;

... et en fait, ca fait une erreur mémoire au "end;" de cette fonction !!!
Va savoir pourkoi ! Il a du allouer de la mémoire qui ne se libère pô, ou je sais pas quoi... En tout cas, même si je ne met que "ProcedureDeMaDLL(paramètres);" dans la fonction "BoutonMachin", ben ca plante quand même... c'est zarbe...
0
cs_kokonut Messages postés 17 Date d'inscription dimanche 16 mars 2003 Statut Membre Dernière intervention 27 mai 2005
28 juin 2003 à 20:12
Re-Salut !

Même si ta Dll ne plante pas en mode dynamique, il se peut que les
problèmes apparaissent du fait que la DLL est maintenant chargé enstatique ... statique chargement de toutes les procedures et fonctions plus de chances de faire apparaître un problème de conflit mmoire.

Si tu pouvais nous fournir un peu plus de détails sur la Dll, peut être qu'on
pourrait la débugger ... c'est toujours bien d'avoir un avis extérieur ... je le
sais bien ... j''avais un problème dans une DLL dans une requête MySQL
à cause d'une parenthèse de trop .... comment voir l'erreur quand on la
cherche depuis des heures ?

Ciao

:shy) --- Kokonut ... lives in Delphi Heaven --- :shy)
Visit at www.jeux3d-intelligence-artificielle.com
0
cs_yoannd Messages postés 305 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 août 2011 7
30 juin 2003 à 10:57
Salut et bonne semaine à toi Kokonut !

Alors, j'ai essayé un truc, j'ai enlevé tous les stdcall pour les remplacer par... heu... ben... rien. Et là, Ho miracle, plus de plantages ! Enfin si, j'ai quand même un dernier plantage à la libération du programme, mais bon, je crois que ca doit être un truc pas trop méchant...
Enfin oila, les stdcall, ca fout la merde, chers delphiteurs de tous poils qui passerons sur ce message... alors renseignez vous pour voir si c'est bien du stdcall que vous voulvoul ou pas...
lol

Allez, tchao, et merci bokou pour ton aide kokonut !
0
Rejoignez-nous