我想将.dll依赖项带入我的Qt项目.
所以我把它添加到我的.pro文件中:
win32 {
LIBS += C:\lib\dependency.lib
LIBS += C:\lib\dependency.dll
}
Run Code Online (Sandbox Code Playgroud)
然后(我不知道这是否是正确的语法)
#include <windows.h>
Q_DECL_IMPORT int WINAPI DoSomething();
Run Code Online (Sandbox Code Playgroud)
顺便说一句,.dll看起来像这样:
#include <windows.h>
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,
LPVOID lpReserved)
{
return TRUE;
}
extern "C"
{
int WINAPI DoSomething() { return -1; }
};
Run Code Online (Sandbox Code Playgroud)
得到错误:未解决的符号?
注意:我没有.dll在.NET的ez pz程序集架构之外没有经验,绝对是n00b.
您的"LIBS + ="语法错误.试试这个:
win32 {
LIBS += -LC:/lib/ -ldependency
}
Run Code Online (Sandbox Code Playgroud)
我也不确定你的.pro文件中是否有带驱动器号的绝对路径是个好主意 - 我通常会将依赖项保留在项目树中的某个位置并使用相对路径.
编辑:
我想你的dll中有些东西是错误的,即符号输出不正确.我总是使用QtCreator提供的模板:
在dll项目里面有mydll_global.h头文件,代码如下:
#ifdef MYDLL_LIB
#define MYDLL_EXPORT Q_DECL_EXPORT
#else
#define MYDLL_EXPORT Q_DECL_IMPORT
#endif
Run Code Online (Sandbox Code Playgroud)Dll项目在其pro文件中有DEFINES + = MYDLL_LIB.
导出的类(或仅选定的方法)和自由函数在头文件中标有MYDLL_EXPORT,即
class MYDLL_EXPORT MyClass {
// ...
};
Run Code Online (Sandbox Code Playgroud)