Bonjour à tous,
Je vous expose mon problème. On me fournit une DLL (compilée avec MS Visual Studio 6) et je suis censé réaliser une appli Qt qui utilise des fonctions de cette DLL (lecture/écriture de fichiers propriétaires entre autres choses). Je ne peux pas partager l'intégralité du code avec vous, mais en voici un template.
Dll_Importee.h
voici le main de mon appli 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 #ifndef _DLL_IMPORTEE_H #define _DLL_IMPORTEE_H #include <windows.h> #include <QtCore/qglobal.h> #include <stdio.h> #define DLLIMPORT _declspec(dllimport) extern "C" { ... DLLIMPORT void Fonction1( char* pChaine ); ... } #endif
et voici mon .pro
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 #include "Mywindow.h" #include <QApplication> #include "Dll_Importee.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWindow w; w.show(); Fonction1("test1"); return a.exec(); }
J'ai tenté de faire importer la librairie automatiquement pas QtCreator (Statique et dynamique, j'ai tenté les deux, là, vous avez la version statique), j'ai essayé de le faire à la main en partant d'un autre projet qui fonctionne... Rien à faire...
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 QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = MyApp TEMPLATE = app SOURCES += main.cpp\ Mywindow.cpp \ HEADERS += Mywindow.h \ Inc/Dll_Importee.h \ INCLUDEPATH+= Inc/ DEPENDPATH+= Inc/ FORMS += Mywindow.ui win32: LIBS += -L$$PWD/Library/ -lDll_Importee INCLUDEPATH += $$PWD/Library DEPENDPATH += $$PWD/Library win32:!win32-g++ PRE_TARGETDEPS += $$PWD/Library/Dll_Importee.lib else:win32-g++: PRE_TARGETDEPS += $$PWD/Library/libDll_Importee.a
Ce code compile (avec un warning rapport à la différence String/Char*) et s'exécute si la ligne du main " Fonction1("test1");" est commentée (l'appel à une fonction de la DLL/LIB). à Partir du moment ou je décommente cette ligne, j'obtiens un message d'erreur au lancement "During startup, prgram exited with code 0xc0000135".
L'architecture du projet est la suivante : de base, Architecture pour un nouveau projet Qt, les fichiers .h importés sont dans un dossier Inc sous la racine du projet Qt, la LIB importée est dans un dossier Librairy sous la racine du projet Qt, la DLL est sous la racine du projet et dans le dossier Library (à deux endroits pour tenter de faire fonctionner le schmilblick dans un premier temps)
Je suppose qu'il doit y avoir un tout petit détail qui m'échappe, mais je ne m'en sors pas, je n'arrive pas à faire appel aux fonctions de la DLL/LIB (je préférerais lié mon apli dynamiquement à une DLL, ça m'éviterait d'avoir à recompiler le projet à chaque fois qu'une nouvelle Dll est générée, mais bon, je me contenterais d'un truc qui marche dans un premier temps^^)
Merci à tous.
Partager