Bonjour,
voici mon problème:
je dois écrire une dll qui sera utilisée par une application commerciale dont je ne connais pas le code. Je ne connais que la signature des fonctions appelées par cette application. J'ai donc une base comme celle-ci :
Test est une classe que j'implémente et qui utilise qt.
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 /* fichier base.h */ #include "test_global.h" #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif TEST_EXPORT int init(); #ifdef __cplusplus } #endif /* fichier base.cpp */ #include "base.h" #include "test.h" #include <windows.h> Test * test = new Test(); TEST_EXPORT int init() { ::MessageBox(NULL, L"init()", L"Info", MB_OK); return test->initialize(); }
Le code est pour l'instant très simple et il compile correctement.
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 #ifndef TEST_H #define TEST_H #include "test_global.h" class TEST_EXPORT Test { public: Test(){} ~Test(){} virtual int initialize(); private: }; #endif // TEST_H /* fichier test.cpp */ #include "test.h" #include <QObject> int Test::initialize() { QString toto; return 1; }
Mon problème est que lorsque je met ma DLL au niveau du logiciel, il refuse de la charger si la méthode initialize() contient la déclaration QString toto. Si je la supprime, il n'y a aucun problème, et la DLL est chargée.
Est-ce que quelqu'un pourrait m'aider à résoudre ce problème ?
merci
Partager