2012-09-25 53 views
1

我有一個問題傳遞一個託管空隙到一個c + + void。你知道如何正確地做到這一點嗎? 這裏是我的C++作爲參數傳遞無效與PInvoke無效

extern "C" __declspec(dllexport) void Display(void(__cdecl* disph)()); 

代碼獲取一個無效(__ CDECL * disph)()我的問題是我怎麼能傳遞一個簡單的空白()(例如公共靜態無效的顯示()) 到該C++無效。

+0

'()=>使用functionName()'? – nawfal

回答

2

你說的是傳遞函數指針吧? void s沒有通過,因爲沒有什麼可以通過,因爲它是錯誤的,無效的。

如果我理解正確,你需要將一個指針傳遞給一個函數,該函數不接受任何參數並且不返回任何內容,對吧?我不是在Windows機器此刻所以這是未經測試,但這樣的事情應該工作:

public delegate void VoidFnDelegate(); 
public value struct MyDLL 
{ 
    [DllImport("MyDll.dll")] 
    static public void Display(VoidFnDelegate fn); 
} 
... 

void SomeFn() { ... } 

MyDll.Display(new VoidFnDelegate(SomeFn)); 
+0

我開始的程序,但在它開始之前,它拋出一個異常說: 調用PInvoke函數'Game!Game.Graphics :: Display'已經失去了堆棧。這很可能是因爲託管的PInvoke簽名與非託管目標籤名不匹配。檢查PInvoke簽名的調用約定和參數是否與目標非託管簽名相匹配。 – user1418638