Problème de passage d'argument VB/C++ dans une dll
EL0807
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention18 mars 2006
-
15 mars 2006 à 22:11
EL0807
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention18 mars 2006
-
18 mars 2006 à 10:34
j'appelle cette fonction dans VB avec le code suivant :
Private Declare Sub SomeFunction Lib "C:\Documents and Settings\...\sample.dll" (ByVal chaine As String)
Sub Test()
SomeFunction ("toto")
End Sub
L'opération s'effectue correctement, mais juste après survient un message d'erreur d'exécution 49 (convention d'appel de DLL incorrecte). Je crois que cela a avoir avec une sombre histoire de __stdcall, mais je ne sais pas quoi en faire (où le placer dans le code). Si je le mets après export ("#define export __stdcall __declspec(dllexport)"), alors plus rien ne marche (erreur 453 : la fonction est introuvable). Pareil si je le mets après "void" ("export void __stdcall SomeFunction(const LPCSTR sometext)").
Please Help!
PS : Vous avez compris que je suis un grand débutant! Si vous avez des références pour m'aider à comprendre ce que je fais, elles sont les bienvenues!
EL0807
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention18 mars 2006 17 mars 2006 à 16:01
Je réponds un peu tard, faute de connexion internet.
Déjà, merci pour votre aide.
Hélas, rien ne marche : call ne change rien, et la compilation du code proposé me renvoie une floppée d'erreur (syntax error before somtext, 'somtext' undeclared, ...)
EL0807
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention18 mars 2006 17 mars 2006 à 23:22
J'ai bien repris les conseils qui m'ont été donné, et me suis inspiré des exemples (qui marchent effectivement), mais mon code bute toujours sur l'erreur 49 :
#include <windows.h>
#ifdef __cplusplus
extern "C" {
#endif
void SomeFunction(const LPCSTR sometext)
{
MessageBox(0, sometext , "DLL Message", MB_OK | MB_ICONINFORMATION);
}
#ifdef __cplusplus
}
#endif
Pourquoi ce code provoque-t-il une erreur tandis que ceux aimablement proposés (ceux de TRAITER STRING VB PAR DLL C/C++ (WIN32)), fonctionnent correctement?
Je ne suis absolument pas informaticien, et les exemples de codes sans commentaires sont pour moi totalement abscons. Je n'ai pas la moindre idée de ce qui est important et de ce qui ne l'est pas, de ce qui peut provoquer cette erreur et de ce qui n'a rien à voir! Un peu de pitié pour un béotien!
Bien cordialement,
EL
EL0807
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention18 mars 2006 17 mars 2006 à 23:44
J'oubliais de préciser que j'ai placé dans le dossier où se situe la dll (TestDLL.dll) un fichier TestDLL.def contenant ces lignes :
LIBRARY TestDLL
EXPORTS
SomeFunction @1
J'ai évidemment changé le nom de la dll dans le code VB.
Bien cordialement,
EL
EL0807
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention18 mars 2006 18 mars 2006 à 10:34
A nouveau merci pour le coup de main!
Le problème c'est que l'ajout de __stdcall provoque une erreur 453 (point d'entrée introuvable). Comme je commence à saisir deux trois trucs, j'ai eu la curiosité d'aller jeter un oeil sur la table d'exportation de la dll avec Quick View Plus 8.0. J'y observe alors que le nom de la fonction est devenu SomeFunction@4. Je modifie en conséquence le fichier .def, qui devient :
LIBRARY TestDLL
EXPORTS
SomeFunction SomeFunction@4