c++ - 为什么 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,它们的函数名都没有以一些奇怪的下划线混合词开头。
有人能解释一下吗?
解决方案
推荐阅读
- java - OpenJDK 12 与商业 JDK 12:库未加载
- javascript - 从 Highchart 的 x 轴上删除 DateTime
- javascript - 通过回调在 Facebook 上点赞和分享
- android - 在 Andorid 中使用 WorkManager 跳过定期工作请求
- c++ - 内联初始化的静态 const 类成员的初始化顺序保证
- html - Bootstrap 4 表单更改复选框有效样式
- java - New Relic中如何查看Kafka Consumer函数响应时间
- java - 无法使用 Jetty 服务器线程池最大大小限制并发请求,为什么?
- javascript - 从 HTML 中的另一个 JavaScript 文件运行 JavaScript 文件
- c# - 为什么将 [ ] 添加到 json 字符串有效,为什么它不能更早地工作