Communication avec une DLL
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
Code:
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 |
voici le main de mon appli Qt :
Code:
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();
} |
et voici mon .pro
Code:
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 |
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...
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.