将.dll导入Qt

Bad*_*Man 3 c++ dll qt

我想将.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.

cha*_*lup 6

您的"LIBS + ="语法错误.试试这个:

win32 {
    LIBS += -LC:/lib/ -ldependency
}
Run Code Online (Sandbox Code Playgroud)

我也不确定你的.pro文件中是否有带驱动器号的绝对路径是个好主意 - 我通常会将依赖项保留在项目树中的某个位置并使用相对路径.

编辑:

我想你的dll中有些东西是错误的,即符号输出不正确.我总是使用QtCreator提供的模板:

  1. 在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)
  2. Dll项目在其pro文件中有DEFINES + = MYDLL_LIB.

  3. 导出的类(或仅选定的方法)和自由函数在头文件中标有MYDLL_EXPORT,即

    class MYDLL_EXPORT MyClass {
    
    // ...
    
    };
    
    Run Code Online (Sandbox Code Playgroud)