次のコードを使用して、C# アプリへのネイティブ コールバックを実行しようとしています。
C#:
public delegate void MyCallback(int i );
[DllImport("core.dll")]
public extern static void set(MyCallback cb);
public static void callmemaybe(int i)
{
Console.Write(i);
}
[DllImport("lgcoree.dll")]
public extern static void Post();
static void Main()
{
set(callmemaybe);
Post();
}
C++:
void (*callback)(int) ;
extern "C" __declspec(dllexport) void __cdecl set( void (*cb)(int) )
{
callback = cb;
}
extern "C" __declspec(dllexport) void __cdecl Post()
{
callback(1);
}
このコードを実行すると、callmemaybe メソッドが実行された直後に、次のエラーが表示されます。これは通常、ある呼び出し対流で宣言された関数を、別の呼び出し対流で宣言された関数ポインターで呼び出した結果です。
しかし、callmemaybe 関数からパラメーターを削除してコードを調整すると (デリゲートとエクスポートされた関数からパラメーターを削除します)、完全に機能します。