私は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 に変更すると、プロジェクトはコンパイルされますが、Connected が 11 としてリストされているため、DLL は文句を言います。
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);
Export in 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 ビットを実行しています。