解决应用调用qt dll时,必须要将exe和qt依赖库放在一起的问题

This commit is contained in:
luoliangyi 2023-03-30 10:49:00 +08:00
parent 146f0a1b7d
commit 9701d6f318
5 changed files with 48 additions and 5 deletions

View File

@ -81,6 +81,7 @@ win32 {
DESTDIR = ../../../../release/win/x86/Release/
}
CONFIG(debug, debug|release) {
DESTDIR = ../../../build/windows/Debug
}
}
contains(QT_ARCH, x86_64){
@ -89,6 +90,7 @@ win32 {
DESTDIR = ../../../../release/win/x64/Release/
}
CONFIG(debug, debug|release) {
DESTDIR = ../../../build/windows/x64/Debug
}
}
}

View File

@ -42,11 +42,9 @@ if (contains(DEFINES, OEM_HANWANG) || contains(DEFINES, OEM_LISICHENG) || contai
}
win32 {
SOURCES += ../../../modules/saneui/dllmain.cpp
SOURCES += ../../../modules/saneui/qmfcapp.cpp
SOURCES += ../../../modules/saneui/qwinhost.cpp
SOURCES += ../../../modules/saneui/qwinwidget.cpp
HEADERS += ../../../modules/saneui/qmfcapp.h
HEADERS += ../../../modules/saneui/qwinhost.h
HEADERS += ../../../modules/saneui/qwinwidget.h
@ -117,6 +115,7 @@ win32 {
DESTDIR = ../../../../release/win/x86/Release/
}
CONFIG(debug, debug|release) {
DESTDIR = ../../../build/windows/Debug
}
}
contains(QT_ARCH, x86_64){
@ -125,6 +124,7 @@ win32 {
DESTDIR = ../../../../release/win/x64/Release/
}
CONFIG(debug, debug|release) {
DESTDIR = ../../../build/windows/x64/Debug
}
}
}
@ -266,6 +266,7 @@ HEADERS += \
SOURCES += \
../../../modules/saneui/HGSaneUI.cpp \
../../../modules/saneui/dialog_device_scan.cpp \
../../../modules/saneui/dialog_device_select.cpp
../../../modules/saneui/dialog_device_select.cpp \
../../../modules/saneui/dllmain.cpp

View File

@ -1,6 +1,10 @@
#include "qmfcapp.h"
#include "base/HGDef.h"
#include "base/HGInc.h"
#include "base/HGUtility.h"
#if defined (HG_CMP_MSC)
#include "qmfcapp.h"
#include "qwinwidget.h"
#include <windows.h>
HINSTANCE g_hInst = NULL;
bool g_ownApplication = FALSE;
@ -10,6 +14,26 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/)
if (dwReason == DLL_PROCESS_ATTACH)
{
g_hInst = hInstance;
HGChar moduleName[512];
HGBase_GetModuleName(DllMain, moduleName, 512);
HGChar modulePath[512];
HGBase_GetFilePath(moduleName, modulePath, 512);
char *env = getenv("QT_QPA_PLATFORM_PLUGIN_PATH");
if (NULL == env)
{
char newEnv[256];
sprintf(newEnv, "QT_QPA_PLATFORM_PLUGIN_PATH=%s", modulePath);
putenv(newEnv);
}
else if (NULL == strstr(env, modulePath))
{
char *newEnv = new char [strlen(env) + 256];
sprintf(newEnv, "QT_QPA_PLATFORM_PLUGIN_PATH=%s;%s", env, modulePath);
putenv(newEnv);
delete []newEnv;
}
}
else if (dwReason == DLL_PROCESS_DETACH)
{
@ -20,3 +44,19 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/)
return TRUE;
}
#else
void __attribute__((constructor)) global_load(void);
void __attribute__((destructor)) global_unload(void);
void global_load(void)
{
}
void global_unload(void)
{
}
#endif