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 :

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();
}
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
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;
}
Le code est pour l'instant très simple et il compile correctement.
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