Bad DLL calling convertion Run-time 49

cs_Sebastien12 Messages postés 23 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 23 mai 2007 - 5 févr. 2004 à 09:59
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 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 :)

6 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
5 févr. 2004 à 12:19
Bonjour

"Le fichier en C d'origine:
CTX_SCAN_2000_API int scanGetNextScanner(HSCANNER *hScanner, BOOL *isOpen, BOOL fRestart);"

HSCANNER ne serait-il pas une structure plutôt qu'un Long ?
0
cs_Sebastien12 Messages postés 23 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 23 mai 2007
5 févr. 2004 à 14:02
A priori non voici la syntaxe du C:

#if defined(_WINDOWS_) || defined(_WINDOWS)
typedef int HSCANNER;
typedef int HPRINTER;
#End If

Sebastien :)
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
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

voila

ShareVB
0
cs_Sebastien12 Messages postés 23 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 23 mai 2007
12 févr. 2004 à 17:13
Sebastien :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Sebastien12 Messages postés 23 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 23 mai 2007
12 févr. 2004 à 17:14
A priori j'ai fait des testes et le résultat est le même. J'ai du mal a comprendre pourquoi elle ne fonctionne pas.

Est ce que certaines APi ne pourrait pas fonctionner en VB?

Sebastien :)
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
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

voila

ShareVB
0
Rejoignez-nous