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