我有一個類型CK_NOTIFY在C++定義如下:如何將這個C類轉換爲C#類型
typedef uint (* CK_NOTIFY)(
uint hSession,
uint event,
void* pApplication
);
我需要重新定義這種類型的C#,因爲我需要用它作爲一個參數pinvoke功能。 究竟是什麼?結構?還是一個函數指針?
我有一個類型CK_NOTIFY在C++定義如下:如何將這個C類轉換爲C#類型
typedef uint (* CK_NOTIFY)(
uint hSession,
uint event,
void* pApplication
);
我需要重新定義這種類型的C#,因爲我需要用它作爲一個參數pinvoke功能。 究竟是什麼?結構?還是一個函數指針?
這將是一個delegate
。你的「C型」正在描述一個功能。
該函數返回uint
並需要2 uints
和void*
。
所以您的代理可能看起來像:
Func<uint, uint, object, uint>
你想怎麼處理void*
是你......
謝謝,雅,我想我會讓它功能
這將返回一個'IntPtr'然後...只是fyi。 'Func <>'中的最後一個類型是返回類型。 – Andrew
啊! Dint知道這一點。謝謝。所以,在你的情況下,當我調用函數時,如何傳遞4個參數?或者uint只是用來保存返回值? –
如果你需要互操作(即它傳遞到非託管。 DLL),你需要這樣一個委託聲明:
public delegate uint CK_NOTIFY(uint hSession, uint @event, System.IntPtr pApplication);
爲什麼有事件的'@'?另外,我注意到在C++端,事件是藍色的(關鍵字),不像其他2個參數 –
@TylerDurden這是相關的:)基本上,'@'允許你使用一個關鍵字('event'就是這樣C#中的關鍵字)並將其用作標識符。 – Luaan
就像TylerDurden是上面評論中的關鍵字一樣;) –
這是一個函數指針。 –