我只是无法弄清楚Visual C++ 2010在做什么,我已经用谷歌搜索了好几个小时,但我仍然不知道发生了什么。我真的非常感谢我能得到的任何帮助。
我有一个要从中导入函数的 DLL ,并且我已经完成了所有通常的动作。我从DLL创建了一个.lib 文件,并创建了一个头文件,其中包含和extern "C"
__stdcall
。
然而,尽管我付出了所有努力,编译器仍然抱怨:
unresolved external symbol _Connected@4 referenced in function _main
这是真正的踢球者,你看到那里的序数吗?@4
<-- 我没有在我的代码中指定任何地方,VC++ 只是决定它显然喜欢数字 4。在 DLL 中,函数 Connected 实际上被列为序数 11,而不是 4。
如果我在 .lib 文件中将函数更改为序数 4,则项目编译,但 DLL 会抱怨,因为它已连接列为 11。
用于 NtDirect.dll 的BinDump:
File Type: DLL
Section contains the following exports for NtDirect.dll
00000000 characteristics
4F58E306 time date stamp Thu Mar 08 09:49:10 2012
0.00 version
1 ordinal base
32 number of functions
32 number of names
ordinal hint RVA name
1 0 000011F0 Ask
...
10 9 000016A0 ConfirmOrders
11 A 000016E0 Connected
12 B 00001750 Filled
...
32 1F 00002070 UnsubscribeMarketData
Summary
13000 .data
3000 .rdata
2000 .reloc
1000 .rsrc
F000 .text
main.cpp的代码:
#include <iostream>
#include "ninja.h"
int main()
{
std::cout << Connected(1);
std::cin.get();
return 0;
}
ninja.h中的声明:(仅显示连接以节省空间)
extern "C" __declspec(dllexport) int __stdcall Connected(int showMessage);
在NtDirect.def中导出:(我已经用 AND 尝试过这个,但没有指定序数。)
LIBRARY NtDirect
EXPORTS
...
ConfirmOrders@10
Connected@11
Filled@12
...
已经尝试过:
从包含Connected@11
AND的 .def 文件构建 .lib Connected
。我也尝试过使用除了 Connected 之外的其他功能,它们也不起作用。我尝试过使用我的导入声明(添加和删除extern "C"
)。
我还确保 DLL 与我的可执行文件位于同一文件夹中,并且我已将 NtDirect.dll 添加到链接器中,以便它可以访问。
我正在运行 Windows 7 64 位。