我无法弄清楚 Visual C ++ 2010 正在做什么,我已经用Google搜索了几个小时,我仍然不知道发生了什么。我真的非常感谢我能得到的任何帮助。
我有一个我导入函数的DLL,我已经完成了所有常用的动作。我已经从 DLL 创建了 .lib文件,并且我创建了一个包含extern "C"
和__stdcall
的头文件。
然而,我把所有的努力都放在了编译器 STILL 的抱怨中:
unresolved external symbol _Connected@4 referenced in function _main
这是真正的踢球者,你看到那里的序数了吗? @4
< - 我没有在我的代码中指定任何地方,VC ++刚刚决定它显然喜欢数字4。在DLL中,函数Connected实际上被列为序数11,而不是4。
如果我在.lib文件中将函数更改为序号4,则项目编译,但DLL会因为已将Connected列为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
和Connected
的.def文件构建.lib。我也尝试过使用除连接之外的其他功能,它们也不起作用。我尝试过使用我的导入声明(添加和删除extern "C"
)。
我还确保DLL与我的可执行文件位于同一个文件夹中,并且我已将NtDirect.dll添加到链接器以便可以访问它。
我正在运行Windows 7 64位。