Bonjour!
Je cherche à réaliser une dll C++ utilisable via EXCEL.
J'utilise Visual C++ Express 2008, et Excel 2003.
Je pense avoir tout bon.. sauf que rien ne marche
Ce que je ne comprend pas c'est que j'avais déjà réussi à faire fonctionner ce code!! (en fouillant dans des vieux postes de ce forums notamment)
Voici le code C++ :
MaDll.h :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ifndef EXTERN_C #define EXTERN_C extern "C" #endif #ifndef MADLL_API #define MADLL_API __declspec(dllexport) #endif EXTERN_C MADLL_API int __stdcall Toto (int a, int b);
MaDll.cpp :
Code c : 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 #include "stdafx.h" #include "MaDll.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } EXTERN_C MADLL_API int __stdcall Toto (int a, int b){ return a+b; }
MaDll.def
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4LIBRARY ViableVix_dll EXPORTS Toto = _Toto@8
Et voici comment j'ai écrit le fichier VBA correspondant :
Bon vous l'aurez compris, ça plante à "i=Toto..."
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Declare Function Toto Lib "MaDll.dll" (ByVal x As Long, ByVal y As Long) As Long Private Sub RunCalibration_Click() nb_reels = CLng(ActiveSheet.Range("nb_reels").Value) nb_x = CLng(ActiveSheet.Range("nb_x").Value) i = Toto(nb_x, nb_reels) MsgBox (Str(i)) End Sub
J'ajoute que j'ai aussi verifié les décorations utilisées par VC++ en générant le fichier Map.
Pour finir, je n'ai pas oublié d'ajouter le fichier MaDll.dll dans le dossier System de mon pc (d'ailleur c'est vraiment moche.. il n'y a pas d'autre solutions??)
Voili voilou ma petite histoire...
Pouriez vous me donner un coup de pousse?? Pke comme vous pouvez vous en douter, ce n'est pas une dll dévouée à Toto que je souhaite executer...
D'avance Merci!!
Mastein
Partager