utilisation d'un dll C++ && fuite memoire [Visual Basic] - VB/VBA/VBS - Programmation
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.
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 ....
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
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 ( ), le problème est logé dans la DLL.
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 ) .
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
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
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 )
Marsh Posté le 10-06-2004 à 22:02:51
Taz a écrit : on croyait que faisais du C++ |
si je pouvais je ne ferai que ça mais quand on a pas le choix ...
Marsh Posté le 10-06-2004 à 22:11:08
pour ce qui est du débat C/C++ je laisse la parole à Taz
(mais l'essentiel, c'est qu'il ne faut JAMAIS mélanger les deux). Quant à wchar_t, c'est du pur C
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 |
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 : |
parfaitement d'accord , ai-je dit le contraire ?
drasche a écrit : |
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.
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.
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 : |
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
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 .