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 : 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
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
 
#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 : 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
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.