cs_Sebastien12
Messages postés23Date d'inscriptionmercredi 4 juin 2003StatutMembreDernière intervention23 mai 2007
-
5 févr. 2004 à 09:59
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
13 févr. 2004 à 19:34
Bonjour,
J'essaye d'accéder à une fonction mais j'ai le message d'erreur bad DLL calling convertion Run-time 49.
Voici mon bout de code
L'api convertit en VB:
Public Declare Function scanGetNextScanner
Lib "CTX_SCAN_2000.dll" (ByVal hScanner As Long, ByVal isOpen As Long, ByVal fRestart As Long) As Long
Le fichier en C d'origine:
CTX_SCAN_2000_API int scanGetNextScanner(HSCANNER *hScanner, BOOL *isOpen, BOOL fRestart);
Mon code est:
Dim Bisopen As Long
Dim Hs As Long
Hs = -1
es1 = scanGetNextScanner(Hs, Bisopen, True)
Et la erreur
Si quelqu'un a une solution ou une petite idée
Merci
Sebastien :)
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 9 févr. 2004 à 21:28
salut
moi j'aurais mis :
Public Declare Function scanGetNextScanner
Lib "CTX_SCAN_2000.dll" (Byref hScanner As Long, Byref isOpen As Long, ByVal fRestart As Long) As Long
car d'apres le prototype en C hScanner et isOpen sont des pointeurs
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 13 févr. 2004 à 19:34
salut
oui certaine fonction ne fontionnent pas (directement) avec VB : VB n'est capable que d'appeler des fonctions definies par __stdcall et ne peut acceder correctement à des fonctions déclarée avec __declspec(dllexport) ou _cdecl. L'exportation des fonctions de la dll C ou C++ doit se faire avec un fichier de dépendance (.dep) :
ce code est compatible VB :
__stdcall int azerty(int* er)
alors que
__cdecl int azerty(int* er)
ou : __declspec(dllexport) int azerty(int* er)
n'est pas compatible VB
En fait cela vient du fait que stdcall et cdecl ne mettent pas les parametres sur la pile dans le meme ordre.
pour les type pointeur je confirme que int* est un pointeur vers int donc en VB un parametre en Byref