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 に変更すると、プロジェクトはコンパイルされますが、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@11ANDを含む .def ファイルの両方から .lib を構築しますConnected。Connected 以外の機能も試してみましたが、機能しません。インポート宣言をいじってみました(追加と削除extern "C")。

また、DLL が実行可能ファイルと同じフォルダーにあることも確認し、リンカーに NtDirect.dll を追加してアクセスできるようにしました。

Windows 7 64 ビットを実行しています。

4

0 に答える 0