0

ボードに .NET アプリケーションと C コードがあります。.NET アプリケーションは、引数としてコールバック関数を使用して C 関数 (ボタンが押されたかどうかを監視するには?) を呼び出し、そのタスクを終了します。私のCアプリケーションはボタンを監視し、ボタンが押されたときに(.NETの)コールバック関数を呼び出す必要があります。C コードから (.NET の)コールバック関数を呼び出すにはどうすればよいですか?

4

1 に答える 1

1

関数の C 定義では、コールバックは関数ポインターとして表現する必要があります。簡単にするために、コールバックが戻りvoid、引数がないと仮定します。

void NativeMethod(void (*pCallback)(void)) { 
  ...
}

このコードが呼び出されると、C コードには単純な関数ポインターが含まれます。必要に応じてこれを呼び出すことができ、.Net コードに移行します。

.Net 側では、関数ポインター型のデリゲートと、C コードへの呼び出しに使用する PInvoke スタブの両方を定義する必要があります。

delegate void CallbackFunc();

[DllImport("the_native_dll")]
static extern void NativeMethod(
  [MarshalAs(UnmanagedType.FunctionPtr)] CallbackFunc cb)

NativeMethodこれで、C# コードは、標準デリゲートを使用して関数を介してネイティブ コードを呼び出すことができます。

于 2013-08-23T05:27:54.853 に答える