DLLインポートを使用してC#ライブラリにインポートしているC++ DLLがあるという奇妙な問題があります。エントリ ポイントを指定すると、すべてが期待どおりに機能します。例を次に示します。
internal static class UnsafeMethods
{
[DllImport("GoodSchool.dll", EntryPoint = @"?AddNum@@YAHHH@Z")]
public static extern int AddNum(int num1, int num2);
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(UnsafeMethods.AddNum(4,5));
}
}
ただし、次のような単純化されたインポートを使用すると:
[DllImport("GoodSchool.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int AddNum(int num1, int num2);
おなじみのエラー メッセージが表示されます。
未処理の例外: System.EntryPointNotFoundException: DLL 'GoodSchool.dll' に 'AddNum' という名前のエントリ ポイントが見つかりません
メソッドが適切に公開されていることを確認するために依存関係を使用し、パラメーターと命名規則を確認するために表記法をデコードしました。すべて問題ないようです。
C++ の関数シグネチャは非常に単純です。
__declspec(dllexport) int AddNum(int num1, int num2);
装飾された名前を EntryPoint として提供せずに C# でこのメソッドを呼び出す方法について何か提案はありますか? 私は何を間違っていますか?「C」エクスポートを使用したくありません。私の理解では、装飾された関数名は DllImport で使用しても問題ありません。