2014-01-09 72 views
0

我有一個類型CK_NOTIFY在C++定義如下:如何將這個C類轉換爲C#類型

typedef uint (* CK_NOTIFY)(
    uint hSession, 
    uint event, 
    void* pApplication 
); 

我需要重新定義這種類型的C#,因爲我需要用它作爲一個參數pinvoke功能。 究竟是什麼?結構?還是一個函數指針?

+1

這是一個函數指針。 –

回答

2

這將是一個delegate。你的「C型」正在描述一個功能。

該函數返回uint並需要2 uintsvoid*

所以您的代理可能看起來像:

Func<uint, uint, object, uint> 

你想怎麼處理void*是你......

+0

謝謝,雅,我想我會讓它功能

+1

這將返回一個'IntPtr'然後...只是fyi。 'Func <>'中的最後一個類型是返回類型。 – Andrew

+0

啊! Dint知道這一點。謝謝。所以,在你的情況下,當我調用函數時,如何傳遞4個參數?或者uint只是用來保存返回值? –

1

如果你需要互操作(即它傳遞到非託管。 DLL),你需要這樣一個委託聲明:

public delegate uint CK_NOTIFY(uint hSession, uint @event, System.IntPtr pApplication); 
+0

爲什麼有事件的'@'?另外,我注意到在C++端,事件是藍色的(關鍵字),不像其他2個參數 –

+1

@TylerDurden這是相關的:)基本上,'@'允許你使用一個關鍵字('event'就是這樣C#中的關鍵字)並將其用作標識符。 – Luaan

+0

就像TylerDurden是上面評論中的關鍵字一樣;) –