C++のコールバック関数の実装

関数ポインタを引数に持つ関数を、C#から利用する方法を考えます。たとえばC++のsample.dllに、

void DllFunction( bool (*Callback)(int) );

のような関数があるとした場合、この関数は型を同じにしたデリゲートを渡すことで呼び出せます。

// マネージド コールバック関数をデリゲートで宣言
delegate bool ManageCallBack(int a);

public class MyClass
{
    [DllImport("sample.dll")]
    public static void DllFunction(ManageCallBack callBack);

    public static void Main()
    {
        // デリゲートを作成
        ManageCallBack callBack = new ManageCallBack(CallbackFunction);

        // デリゲートを渡して、DLL関数を呼び出す
        DllFunction(callBack);
    }

    // DLL関数から呼ばれるコールバック関数
    public static bool CallbackFunction(int a)
    {
        return true;
    }
}

参考

参考書

Microsoft Learnから検索