Problème d'interfacage d'une DLL écrite en C++ avec vba

Résolu
pierrinot Messages postés 4 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 16 septembre 2005 - 15 sept. 2005 à 19:12
pierrinot Messages postés 4 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 16 septembre 2005 - 16 sept. 2005 à 11:17
Bonjour,



Je dois créer une DLL utilisable par un programme VBA. Je tombe sur un problème d'entête de fonctions.



La DLL est bien compilée, mais lorsque je m'en sers sur excel, je suis obligé de supprimer une valeur des paramètres.



En C++ :



void _stdcall Initialize

(

int n0,

int n1,

int n2,

int n3

)



Dans vba :

Public Declare Function Initialize _

Lib "C:\Documents and Settings\...\testDLL.dll" _

( _

ByVal n0 As Long, _

ByVal n1 As Long, _

ByVal n2 As Long)



Problème de types ?

J'ai essayé avec Integer ça donne la même chose.

(je recharge la dll avant de tester)



Je souhaiterais également faire des classes à utiliser ensuite en vba, mais ça semble difficile à faire.



Existe t'il de la literature sur ce sujet ?



Merci à tous !

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 sept. 2005 à 22:53
Jamais vu qu'on supprime des params d'une dll, doit y avoir un malaise dans la dll, faudrait voir pour diagnostiquer. Param int ou long depuis dll doit être 'As Long' depuis VB et pas autre chose.

Des classes dans la dll ??? A part la faire grossir inutilement je ne vois pas l'intérêt.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 sept. 2005 à 09:32
WINAPI est un alias de __stdcall donc idem.

DLL C ET ASM POUR VB
http://www.cppfrance.com/code.aspx?id=20672

ciao...
BruNews, MVP VC++
3
pierrinot Messages postés 4 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 16 septembre 2005
16 sept. 2005 à 11:17
C'est bon ça fonctionne, je pense qu'il y avait plusieurs problèmes imbriqués :



- Mauvaise correspondance des types entre VC++ et VBA

- Et mauvaise définition du .h



Voilà ce que j'ai maintenant :



#ifdef TESTDLL_EXPORTS

#define TEST_DLL_API __declspec(dllexport) __stdcall

#else

#define TEST_DLL_API __declspec(dllimport) __stdcall

#endif



extern "C" long TEST_DLL_API GetTestValue(long value);



Merci pour vos aides !
3
nicooooo1 Messages postés 58 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 4 février 2012
16 sept. 2005 à 00:28
bsr,

D apres moi la déclaration de la fonction serait plutot :



Public declare sub Initialise..........

et pas function
0

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

Posez votre question
pierrinot Messages postés 4 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 16 septembre 2005
16 sept. 2005 à 08:40
Merci pour l'info des classes, je souhaitais utiliser des classes pour
définir les intrants de la fonction - mais si c'est une pratique qui ne
se fait pas, ça me convient trés bien.



Je pense que j'ai un problème de compilation, j'ai récupéré un code
source sur ce site, j'arrive à utiliser la DLL livrée mais pas celle
que j'obtiens aprés compilation.



Pas de littérature sur les DLL et autres techniques Microsoft ?

Y a t-il une limitation sur le nombre de paramètres à passer en paramétre ?

Faut-il plutôt utiliser WINAPI ou bien _stdcall ?



Bien des éléments me sont encore obscurs...



En tout cas, merci les gars pour vos réponses claires et rapides !
0
pierrinot Messages postés 4 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 16 septembre 2005
16 sept. 2005 à 10:36
Merci,



J'ai trouvé ce livre qui semble intéressant :

http://books.global-investor.com/books/20387.htm?ginPtrCode=10202



Sinon, je pense que j'ai réellement un problème d'option de compilation
car toutes les fonctions que je créé en ne passant rien en paramètre
fonctionne, ça plante dès que je mets des paramètres (même un).



Et pourtant je sais que le programme rentre dans la DLL, mais je ne sais pas à quel moment ça plante.



...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 sept. 2005 à 11:07
C'est l'export qui doit déconner.
Tu reprends bien le modèle de celle dont j'ai donné le lien au dessus ?
Tu bosses sur VC++ ?

ciao...
BruNews, MVP VC++
0
Rejoignez-nous