1

C# プロジェクトでカスタム VC++ dll を使用しようとしています。そのために、この記事に従ってカスタムを作成しました。別の C++ プロジェクト ( MyExecRefsDLL.vcxproj ) で DLL を作成し、リンクして呼び出すことができました。

ここで、私の意図は、C# コードで同じ DLL を使用することでした。したがって、別のC#コンソールプロジェクトを作成し、上記のリンクで提案されているように、参照を追加しようとしました(右クリック->参照の追加->プロジェクト「MathFuncDLL 」を選択)。「'MathFuncDLL' への参照を追加できませんでした」というエラーが表示されました。

この問題を克服するために、プロジェクト テンプレート -> Visual C++ -> クラス ライブラリを使用して、 VC++ dll の別のプロジェクト、つまりMathFuncDLL2を作成しようとしました。今回はC#でプロジェクトを参照できるようになりました。実行時に、DLL からメソッドを呼び出しているときにエラーが発生しました - 「EnteryPointNotFoundException が処理されませんでした」「DLL 'MathFuncDLL2.dll' で 'Add' という名前のエントリ ポイントが見つかりません。」

このリンクからダウンロードできるサンプルを作成しました。

どんな助けでも大歓迎です。

4

3 に答える 3

1

あなたの問題は、エクスポート時に C++ が関数名を装飾することかもしれません。したがって、Addは実際には である可能性があります@Add34ZZ

実行するdumpbin /exports MathFuncsDLL2.dllと、次のものが返されます。

    ordinal hint RVA      name

          1    0 00001193 ?Add@MyMathFuncs@MathFuncs@@SANNN@Z = ?Add@MyMathFuncs
@MathFuncs@@SANNN@Z (public: static double __cdecl MathFuncs::MyMathFuncs::Add(d
ouble,double))
          2    1 000011A5 ?Divide@MyMathFuncs@MathFuncs@@SANNN@Z = ?Divide@MyMat
hFuncs@MathFuncs@@SANNN@Z (public: static double __cdecl MathFuncs::MyMathFuncs:
:Divide(double,double))
          3    2 0000119F ?Multiply@MyMathFuncs@MathFuncs@@SANNN@Z = ?Multiply@M
yMathFuncs@MathFuncs@@SANNN@Z (public: static double __cdecl MathFuncs::MyMathFu
ncs::Multiply(double,double))
          4    3 00001199 ?Subtract@MyMathFuncs@MathFuncs@@SANNN@Z = ?Subtract@M
yMathFuncs@MathFuncs@@SANNN@Z (public: static double __cdecl MathFuncs::MyMathFu
ncs::Subtract(double,double))

したがって、利用可能なソリューションは次のとおりです。

  • 関数を次のように宣言しますextern "C" __declspec(dllexport)(そして名前空間を削除します)

  • dumpbinコンパイルして使用するときに実行します。[DllImport("Math.dll", EntryPoint="?Add@MyMathFuncs@MathFuncs@@SANNN@Z")]これを行う場合は、DllImport 宣言を に変更します[DllImport("MathFuncDLL2.dll", EntryPoint="<functionName>", CallingConvention=CallingConvention.Cdecl)]。良いニュースは次のとおりです。通話が機能します。悪い点は、結果へのポインタを返すように見えることです。

于 2013-02-22T09:57:51.770 に答える
0

[DllImport] を使用して、任意の標準 dll から関数を呼び出せるようにします

この記事を読む

于 2013-02-22T09:25:38.213 に答える