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

Signaler
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
-
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
-
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

Messages postés
17
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
27 mai 2005

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
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
6
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...
Messages postés
17
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
27 mai 2005

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
Messages postés
305
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
6
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 !