[Visual Basic] utilisation d'un dll C++ && fuite memoire

utilisation d'un dll C++ && fuite memoire [Visual Basic] - VB/VBA/VBS - Programmation

Marsh Posté le 10-06-2004 à 14:27:17    

Bonjour , je dois utiliser une dll faite en C++ ( fait maison ) , en gros cette dll va allouer un bloc memoire( avec un malloc ) et stocker un chaine de char a l'interieur , je fais donc appel a cette fonction de ma dll a partir de VB , pas de problème de ce coté la tout marche bien .
par contre quand je n'ai plus besoin de cette variable je fais appel a une autre fonction de ma dll qui fait une free ( la_variable ) pour liberer la memoire , ce qui fais gentillement planter mon programme VB , si je ne fais pas appel a cette fonction la memoire n'est jamais liberé donc ca ne peux pas aller .  
 
comment faite vous en VB pour libere la memoire allouer par une dll ? une solution ?  
 
merci d'avance .

Reply

Marsh Posté le 10-06-2004 à 14:27:17   

Reply

Marsh Posté le 10-06-2004 à 14:40:02    

Comment tu passes ta variable: ByRef ou ByVal ?
Je crois que dans ton cas, il faut la passer ByVal pour avoir une copie et non pas un pointeur.
 

Reply

Marsh Posté le 10-06-2004 à 21:01:57    

dans ma fontion d'alloc en byref , je suis obliger d'avoir un pointeur pour faire mon malloc et il est impossible dans mon cas de determiner la taille de ma chaine de char donc pas le choix , je le passe aussi en byref dans ma fonction de liberation de la memoire .  
 
Sinon pas moyen de trouver de la doc la dessu dans google , a croire que vouloir bien gerer la memoire avec VB c'est pas faisable ....

Reply

Marsh Posté le 10-06-2004 à 21:04:13    

« e dois utiliser une dll faite en C++ ( fait maison ) , en gros cette dll va allouer un bloc memoire( avec un malloc ) »
 
je sais déjà d'où elle vient la fuite :o

Reply

Marsh Posté le 10-06-2004 à 21:15:50    

VB gère sa mémoire très bien tout seul comme un grand (dans la plupart des cas)
 
Ici clairement, comme Taz le souligne ( :D), le problème est logé dans la DLL.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 10-06-2004 à 21:46:47    

..... que repondre ....
 
j'ai bien comprit que mon malloc alloue la memoire , le problème c'est la liberation , le problème c'est que l'appel a la fonction de ma dll qui doit liberer la memoire ne marche pas dans VB alors que la meme fonction appeler depuis un programme en C marche tres bien .  
Je suis obliger d'utiliser cette fonction de liberation de memoire car VB n'est pas foutu de liberer la memoire allouer par ma dll ( je veux bien le comprendre ) .

Reply

Marsh Posté le 10-06-2004 à 21:50:30    

on croyait que faisais du C++ :o

Reply

Marsh Posté le 10-06-2004 à 21:52:30    

bin pour moi, vous devriez auditer cette DLL parce que je suis certain que le bug est là dedans, l'allocation mémoire (ou désallocation) doit pas être bien propre [:spamafote]
 
Pour éclaircir le propos de Taz, l'emploi d'une fonction comme malloc, issue du C, n'est pas du tout standard en C++. Il est là le problème. Et la chaîne est sans doute de type char* ? C'est pas du C++ non plus, donc tout ce qu'on peut dire, c'est de conseiller au gars qui a fait cette DLL de refaire son boulot [:spamafote]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 10-06-2004 à 22:02:16    

Il n'y a aucun problème a utiliser des fonction C standard dans du C ++ , a moins de faire le zouave et de mellanger des new avec des free et des malloc avec des delete la ca va poser problème , mais dans le cas d'un bloc memoire allouer avec un malloc et liberé avec un free je voie pas ce qui peux poser problème .  
 
Pourrais tu me dire en quoi un char * ne fais pas partir du C++ standard ( http://www.cplusplus.com/doc/tutorial/tut1-2.html si tu  parles des wchar_t trop recent pour etre utilisé sans risque )

Reply

Marsh Posté le 10-06-2004 à 22:02:51    

Taz a écrit :

on croyait que faisais du C++ :o


 
si je pouvais je ne ferai que ça mais quand on a pas le choix ...

Reply

Marsh Posté le 10-06-2004 à 22:02:51   

Reply

Marsh Posté le 10-06-2004 à 22:11:08    

pour ce qui est du débat C/C++ je laisse la parole à Taz :D
 
(mais l'essentiel, c'est qu'il ne faut JAMAIS mélanger les deux).  Quant à wchar_t, c'est du pur C [:spamafote]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 10-06-2004 à 22:14:37    

drasche a écrit :

pour ce qui est du débat C/C++ je laisse la parole à Taz :D


 
tu m'excuses mais j'ai pas le temps en se moment , une simple reponse me suffira , qui a déjà eu un problème du meme genre et comment fut il résolu .  
 

drasche a écrit :


(mais l'essentiel, c'est qu'il ne faut JAMAIS mélanger les deux).  


 
parfaitement d'accord , ai-je dit  le contraire ?  
 

drasche a écrit :


 Quant à wchar_t, c'est du pur C [:spamafote]


 
mouais bof ....  
 
Wide character. It is designed as a type to store international characters of a two-byte character set. NOTE: this is a type recently added by the ANSI-C++ standard. Not all compilers support it.

Reply

Marsh Posté le 10-06-2004 à 22:16:18    

huhu, j'aurais juré que c'était un type défini par MS dans l'API Win32, soit.
 
Mais pour résoudre ton problème, je pense pas que t'auras une autre solution que celle exposée ici.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 10-06-2004 à 22:22:48    

drasche a écrit :

huhu, j'aurais juré que c'était un type défini par MS dans l'API Win32, soit.


 
beark beark , enfin je t'avoue que je n'ai jamais utilisé ce type de variable et que je ne vais pas y toucher avant quelques années mais la n'est pas le problème  
 

drasche a écrit :


Mais pour résoudre ton problème, je pense pas que t'auras une autre solution que celle exposée ici.


 
argh argh argh enfin   avec un peu de chance , enfin je vous tiens au courant des que j'ai la solution , cochonerie de VB va

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed