Bonjour à tous,
Voilà quelques jours que je me suis lancé dans l'apprentissage de création de dll en C++(pour info j'utilise VS2008).
En suivant ce tutoriel j'obtiens le code suivant :
Fichier Header
Fichier Source
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 // MathFuncsDll.h // fonctions effectuant les operations de base namespace MathFuncs { class MyMathFuncs { public: // effectue a + b static __declspec(dllexport) double MyFunc(double a, double b); }; }
Ce qui, lorsque je compile, me donne un MyFuncDLL.dll. Jusque là tout semble aller comme je veux...
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 // MathFuncsDll.cpp // compiler avec: /EHsc /LD #include "MathFuncsDll.h" #include <stdexcept> using namespace std; namespace MathFuncs { double MyMathFuncs::MyFunc(double a, double b) { return a + b; } }
Mais ce n'est pas le cas , car lorsque je tente d'exploiter ma fonction via cette dll à l'aide de :
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
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <windows.h> #include <stdio.h> // DLL function signature typedef double (*importFunction)(double, double); int main(int argc, char **argv) { importFunction MyFunc; double result; // Load DLL file HINSTANCE hinstLib = LoadLibrary(TEXT("MyFuncDLL.dll")); if (hinstLib == NULL) { printf("ERROR: unable to load DLL\n"); } else { printf("DLL loaded\n"); } // Get function pointer MyFunc = (importFunction)GetProcAddress(hinstLib, "MyFunc"); if (MyFunc == NULL) { printf("ERROR: unable to find DLL function\n"); FreeLibrary(hinstLib); } else { printf("function found\n"); } // Call function. result = MyFunc(1, 2); // Unload DLL file FreeLibrary(hinstLib); // Display result printf("The result was: %f\n", result); getchar(); return 0; }
J'obtiens bien le "DLL loaded" mais j'ai ensuite l'erreur "ERROR: unable to find DLL function" !
Si quelqu'un(e) pouvait m'expliquer où se trouve mon erreur, ça m'enlèverait une fière chandelle du pied
Merci d'avance pour vos conseils !!
Partager