Hallo, ich zeige mal zwei minimale Projekte, die zusammen bei mir laufen. Vielleicht hilft das weiter, auch wenn ich noch nicht genau weiß, was Du vorhast. Ich habe allerdings alles mit MinGW/QtCreator gebaut, ohne VS zu verwenden.
Ich habe einfach ein MainWindow mit dem Designer erstellt und das in der dll gestartet. Die nicht-Qt App lädt die dll genauso, wie es oben steht und startet mit dem AddNumbers() das MainWindow.
Im Debug-Verzeichnis von dll-test1 stehen bei mir folgende Dateien:
dll-test1.exe (die nicht Qt-App)
gui1.dll (manuell kopiert aus dem Verzeichnis des dll- debug build)
libgcc_s_sjlj-1.dll (manuell kopiert aus mingw64)
main.o (ist nicht mehr wichtig)
QtCored4.dll (manuell kopiert aus der Qt-Toolchain)
QtGuid4.dll (manuell kopiert aus der Qt-Toolchain)
1.) Für die DLL:
gui1.pro
@TARGET = gui1
TEMPLATE = lib
DEFINES += GUI1_LIBRARY
SOURCES += gui1.cpp
HEADERS += gui1.h
ui_mainwindow.h
FORMS +=
mainwindow.ui
@
gui1.h
@#ifndef GUI1_H
#define GUI1_H
#include <QtCore/qglobal.h>
#if defined(GUI1_LIBRARY)
define GUI1SHARED_EXPORT Q_DECL_EXPORT
#else
define GUI1SHARED_EXPORT Q_DECL_IMPORT
#endif
GUI1SHARED_EXPORT int main(int argc, char* argv[]);
#endif // GUI1_H
@
gui1.cpp
@#include "gui1.h"
#include "ui_mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow window;
Ui::MainWindow ui;
ui.setupUi(&window);
window.show();
app.exec();
}
@
2.) Für die (nicht-qt) Application:
dll-test1.pro
@TEMPLATE = app
CONFIG += console
CONFIG -= qt
SOURCES += main.cpp
@
dll-test1.cpp
@#include <windows.h>
#include <iostream>
using namespace std;
typedef double (BinaryFunction_t) (int, char) ;
int CallMyDLL (void)
{
BinaryFunction_t AddNumbers ;
double result ;
bool fFreeResult ;
// DLL Datei laden
HINSTANCE hinstLib = LoadLibrary (TEXT("gui1.dll"));
if (hinstLib != NULL)
{
// Die Einsprungadresse abfragen
AddNumbers = (BinaryFunction_t) GetProcAddress (hinstLib, "main") ;
// Die Funktion aufrufen
if ( AddNumbers != NULL )
result = (*AddNumbers) (1, (char*)"this is a test") ;
// Die DLL-Datei wieder entladen
fFreeResult = FreeLibrary (hinstLib) ;
} else {
cout << "Could not load dll" << endl;
}
return 0 ;
}
int main(int argc, char *argv[])
{
CallMyDLL();
return 0;
}
@