関数ポインタを引数に持つ関数を、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; } }