Problème d'interfacage d'une DLL écrite en C++ avec vba [Résolu]

pierrinot 4 Messages postés jeudi 15 septembre 2005Date d'inscription 16 septembre 2005 Dernière intervention - 15 sept. 2005 à 19:12 - Dernière réponse : pierrinot 4 Messages postés jeudi 15 septembre 2005Date d'inscription 16 septembre 2005 Dernière intervention
- 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 !
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 15 sept. 2005 à 22:53
3
Merci
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de BruNews
Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 16 sept. 2005 à 09:32
3
Merci
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++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de BruNews
Meilleure réponse
pierrinot 4 Messages postés jeudi 15 septembre 2005Date d'inscription 16 septembre 2005 Dernière intervention - 16 sept. 2005 à 11:17
3
Merci
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 !

Merci pierrinot 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de pierrinot
nicooooo1 58 Messages postés mercredi 2 février 2005Date d'inscription 4 février 2012 Dernière intervention - 16 sept. 2005 à 00:28
0
Merci
bsr,

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



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

et pas function
Commenter la réponse de nicooooo1
pierrinot 4 Messages postés jeudi 15 septembre 2005Date d'inscription 16 septembre 2005 Dernière intervention - 16 sept. 2005 à 08:40
0
Merci
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 !
Commenter la réponse de pierrinot
pierrinot 4 Messages postés jeudi 15 septembre 2005Date d'inscription 16 septembre 2005 Dernière intervention - 16 sept. 2005 à 10:36
0
Merci
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.



...
Commenter la réponse de pierrinot
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 16 sept. 2005 à 11:07
0
Merci
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++
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.