Bonjour à tous,
une question qui est entre du C++ et du VBA (j'ai choisi de la mettre ici) :
Je veux compiler une dll pour l'utiliser ensuite en VBA sous Excel. C'est la première fois que je fais ça et je veux juste assimiler le principe avec un exemple très simple.
J'ai créé un projet sous code block. Voici mon .h :
et voici mon .cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #ifndef __MAIN_H__ #define __MAIN_H__ #include <windows.h> /* To use this exported function of dll, include this header * in your project. */ #ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif int DLL_EXPORT carre(int chiffre); #ifdef __cplusplus } #endif #endif // __MAIN_H__
Je compile ma dll, ça a l'air de fonctionner. Je vais sous Excel et je déclare dans un module :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include "main.h" // a sample exported function int DLL_EXPORT carre(int chiffre) { return chiffre*chiffre; } extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: // attach to process // return FALSE to fail DLL load break; case DLL_PROCESS_DETACH: // detach from process break; case DLL_THREAD_ATTACH: // attach to thread break; case DLL_THREAD_DETACH: // detach from thread break; } return TRUE; // succesful }
Option Explicit
Private Declare Function carre Lib "C:\Users\Nicolas\Desktop\DLL C++\TestDLL\bin\Release\TestDLL.dll" (ByVal chiffre As Integer) As Integer
Sub toto()
Debug.Print carre(10)
End Sub
J'obtiens l'erreur 49 :
Convention d'appel de dll incorrecte
J'ai tenté de changer le type des variables en double dans les deux (C et VBA), mais sans succès. Est ce que quelqu'un peut me dire d'où vient le problème ?
Je vous remercie
Partager