cs_anthropo
Messages postés2Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention 2 juin 2006
-
2 juin 2006 à 16:43
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
4 juin 2006 à 23:56
bonjour à tous,
je suis débutant de chez Débutant et je cherche à modifier une dll écrite en C++ pour en augmenter ses fonctions.
Je cherche notamment à créér une fonction qui me retournerais du texte dans vb :
j'ai essayé de la déclarer par
#include <string>
et std::string _stdcall ReadAngle()
{
return "TOTO";
}
et là gros plantage dans VB :
Public Declare Function ReadAngle Lib "inpout32.dll" (ByVal Portadress As Integer) As Integer
la ligne qui plante est: Dir.Text = Str(ReadAngle("&H0379"))
pas de message d'erreur, ni moyen de comprendre ni de trouver la réponse.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 2 juin 2006 à 17:30
tu a un problème dans ta fonction. Tu retourne quelque chose avant de libérer ta mémoire. Tu te trouve donc a quitter ta fonction avant de libérer la mémoire. Il faudrait faire:
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 2 juin 2006 à 17:34
Ensuite, c'est étrange cette fonction : SysAllocStringByteLen. C'est de l'OLE non? Je comprend pas son fonctionnement. J'espère que la mémoire est bien allouer car sinon tu fais un free sans allocation. Ça pourrais entrainer certain problèmes.
___________________________________________
Les plus grands esprits trouvent toujours une solution
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 juin 2006 à 23:56
Petite correction. Je sais pas pourquoi j'ai dit de mettre free avant return dans ta fonction. Je devais être saoul ou très fatigué. Peu importe. Le problème est toujours la. Tu quitte ta fonction mais tu libère après le return donc la libération ne se fera jamais. Donc il faudrais que tu libère ta mémoire en dehors de ta fonction comme ceci:
Ou encore tu modifie ta fonction de sorte que la mémoire soi alloué et libéré en dehors de celle-ci (par exemple, tu alloue la mémoire à une variable, tu passe cette variable à ta fonction en paramètre et ta fonction s'occupe de modifier la chaine de caractère) mais il faut absolument que tu libère la mémoire, c'est l'important.
___________________________________________
Les plus grands esprits trouvent toujours une solution