【发布时间】:2017-03-03 09:14:02
【问题描述】:
我的 32 位 Windows 程序使用默认的 __cdecl 调用约定。它正在使用 Qt 工具包。我正在尝试使用使用 __stdcall 约定并仅导出未修饰名称的未管理 dll。
dumpbin /exports library.dll
[...]
00000000 characteristics
0 time date stamp
0.00 version
1 ordinal base
210 number of functions
210 number of names
ordinal hint RVA name
[...]
6 9D 0000361C OpenComm
[...]
我创建了带有修饰名称映射的 .def 文件:
EXPORTS
_OpenComm@8=OpenComm
因此.lib 有以下导出(注意前面的双下划线):
__OpenComm@8
头文件包含(注意我必须放在那里以匹配.lib):
extern "C"
{
int __stdcall _OpenComm(char *com, int Baudrate);
}
程序编译得很好,但是当我尝试运行它时,运行时链接器给了我一个错误:
The procedure entry point _OpenComm@8 could not be located in the dynamic link library.
好的。 Dll 没有我的映射名称...我该如何解决这个问题?我可以在编译的 .dll 中重命名导出吗? :-)
【问题讨论】: