我有一个QT应用app.exe
和一个QT插件plugin.dll
。我的plugin.dll
取决于许多其他动态库(例如lib1.dll
,lib2.dll
等)。为了分发我的项目,我有这个文件夹结构(忽略QT库):
app.exe
plugins\
plugin.dll
lib1.dll
lib2.dll
lib3.dll
问题是对libX.dll
有太多依赖,我想将它们隐藏在插件文件夹中,例如:
app.exe
plugin\
plugin.dll
lib1.dll
lib2.dll
lib3.dll
但是这种方式库libX.dll
是"看不见的"到我的插件,以便它无法加载。有没有办法解决这个问题?
我正在使用此代码导入libX.dll
plugin.dll
pro
中的LIBS += -Lpath -l lib1 -l lib2 -l lib3
- 文件:
java.fullversion=JRE 1.6.0 IBM J9 2.6 Windows 7 amd64-64 Compressed References 20151222_283040 (JIT enabled, AOT enabled)
答案 0 :(得分:0)
解决此问题的方法之一是:
这些更改应在plugin.dll
代码中完成:
/* Declare a pointer to import function */
typedef void (*FUNCTION)();
FUNCTION f;
/* Make system search the DLLs in my plugin folder */
// Variable "app" contains directory of the application, not the plugin
QDir app = QDir(qApp->applicationDirPath());
// Combine path
QString plugin_path = app.filePath("plugins/");
// Adding full path for DLL search
SetDllDirectory(plugin_path.toStdWString().c_str());
/* Linking the library */
QLibrary mylib("mylib.dll");
f = (FUNCTION ) mylib.resolve("function");
if (f != NULL)
f(); // You got the function from DLL
else
return; // DLL could not be loaded
此解决方案存在缺陷:
SetDllDirectory
,但我不确定)有人知道纯Qt解决方案吗?