moreau_l
Messages postés35Date d'inscriptionmercredi 8 octobre 2003StatutMembreDernière intervention 7 septembre 2007
-
4 mars 2005 à 09:24
moreau_l
Messages postés35Date d'inscriptionmercredi 8 octobre 2003StatutMembreDernière intervention 7 septembre 2007
-
4 mars 2005 à 11:26
Bonjour tout le monde,
J'ai un petit problème avec une DLL que je fais sous VC++ 6 et que je veux utiliser sous VBA.
J'arrive sans problème à créer et utiliser ma DLL. Cependant, dès que
j'utilise des String en paramètre de fonction, j'ai un soucis. La
fonction est bien appellée et exécutée entierement mais VB me déclence
une erreur : "convention d'appel de DLL incorrecte"
Mes déclarations sont :
en C++ :
extern "C" char* t1(){ return "essai";}
extern "C" void t2(char *arg){MessageBox...}
en VB :
Public Declare Function t1 Lib "maDLL" () As String
Public Declare Sub t2 Lib "maDLL" (ByVal arg As String)
Donc, l'appel à t1 ne pose aucun problème. L'appel à t2 fonctionne (je
vois ma MessageBox qui affiche bien mon paramètre) mais me déclenche
une erreur de convention d'appel de DLL incorrecte.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 4 mars 2005 à 10:47
Autre rectif nécessaire:
char* équivaudrait à String de VB ?
ABSOLUMENT NON !!!
String est une zone mémoire allouée par SysAllocString() et autres APIs de sa catégorie (voir MSDN), cette zone comprend 4 octets au début, le compteur. Les données se trouvent donc à un offset 4 et peuvent contenir nimporte quelles valeurs y compris des zéros et n'a donc pas de délimiteur. Une chaine C n'en 'contient' jamais puisque le zéro est son délimiteur.