2

我只是无法弄清楚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@11AND的 .def 文件构建 .lib Connected。我也尝试过使用除了 Connected 之外的其他功能,它们也不起作用。我尝试过使用我的导入声明(添加和删除extern "C")。

我还确保 DLL 与我的可执行文件位于同一文件夹中,并且我已将 NtDirect.dll 添加到链接器中,以便它可以访问。

我正在运行 Windows 7 64 位。

4

0 回答 0