2013-08-23 123 views
0

我的主板上有.NET應用程序和C代碼。 .NET應用程序會以回調函數作爲參數調用C函數(要觀看按鈕是否被按下?)並結束它的任務。我的C應用程序將觀察按鈕並按下按鈕時回調函數(.NET)必須被調用。 如何從我的C代碼中調用回調函數(的.NET)?從處理器調用.NET應用程序的回調函數C代碼

回答

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) 

現在的C#代碼可以通過使用標準的代表

+0

這是非常整潔的NativeMethod函數調用到本機代碼,我還以爲你至少需要上下文參數什麼的。 – zneak

+0

謝謝。它幫助了我。 – androidbuddy