首页 > 解决方案 > 为什么 Qt Creator 创建的 dll 与普通的 dll 不同(非托管)

问题描述

Reacently 我尝试使用 Visual Studio 中内置的 dll。经过努力,我成功编译并得到了一些 dll 和一些头文件。但是,当我尝试在 Qt Creator 中使用该 dll 时,它总是告诉我“未定义对 `_imp___ 的引用”

我不得不怀疑我的 dll 是否正确编译。所以我使用 DLL Export Viewer 来检查我的 dll。

我的dll的功能:

bool __cdecl MsgPack::registerPacker(int,signed char,class QByteArray (__cdecl*)(class QVariant const & __ptr64))   0x0000000180001280  0x00001280  50 (0x32)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   
bool __cdecl MsgPack::registerType(enum QMetaType::Type,unsigned char)  0x0000000180001290  0x00001290  51 (0x33)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   
bool __cdecl MsgPack::registerUnpacker(signed char,class QVariant (__cdecl*)(class QByteArray const & __ptr64)) 0x00000001800012a0  0x000012a0  52 (0x34)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   
class MsgPackStream & __ptr64 __cdecl operator<<(class MsgPackStream & __ptr64,class QDate const & __ptr64) 0x00000001800078b0  0x000078b0  27 (0x1b)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   
class MsgPackStream & __ptr64 __cdecl operator<<(class MsgPackStream & __ptr64,class QDateTime const & __ptr64) 0x00000001800079d0  0x000079d0  28 (0x1c)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   
class MsgPackStream & __ptr64 __cdecl operator<<(class MsgPackStream & __ptr64,class QPoint const & __ptr64)    0x0000000180008150  0x00008150  29 (0x1d)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   
class MsgPackStream & __ptr64 __cdecl operator<<(class MsgPackStream & __ptr64,class QRect const & __ptr64) 0x0000000180008260  0x00008260  30 (0x1e)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   
class MsgPackStream & __ptr64 __cdecl operator<<(class MsgPackStream & __ptr64,class QSize const & __ptr64) 0x00000001800083d0  0x000083d0  31 (0x1f)   qmsgpack.dll    C:\Users\Ivy\Desktop\Qt Project\Test\Test\qmsgpack.dll  Exported Function   

但是,一个qt创建的dll(lib),可以很好的链接,看起来是这样的

_ZN8Untitled4FOOkEv 0x6a9413d0  0x000013d0  1 (0x1) untitled.dll    C:\Users\Ivy\Desktop\Qt Project\build-untitled-Desktop_Qt_5_12_3_MinGW_64_bit-Release\release\untitled.dll  Exported Function   
_ZN8UntitledC1Ev    0x6a9413c0  0x000013c0  2 (0x2) untitled.dll    C:\Users\Ivy\Desktop\Qt Project\build-untitled-Desktop_Qt_5_12_3_MinGW_64_bit-Release\release\untitled.dll  Exported Function   
_ZN8UntitledC2Ev    0x6a9413c0  0x000013c0  3 (0x3) untitled.dll    C:\Users\Ivy\Desktop\Qt Project\build-untitled-Desktop_Qt_5_12_3_MinGW_64_bit-Release\release\untitled.dll  Exported Function   

难怪当我尝试链接到正常的 dll 时,它无法链接。

我检查了系统中的其他一些 dll,它们的函数名都没有以一些奇怪的下划线混合词开头。

有人能解释一下吗?

标签: c++qtdll

解决方案


推荐阅读