2015-12-24 13 views
0

以下是從C++自我指涉結構的PInvoke的從C++

typedef struct _FCV 
{ 
    unsigned long ulID; 
    unsigned long ulVersion; 
    unsigned long ulStatus; 
    unsigned long ulSize; 
    struct _FCV*  pNext; 
} FCV; 

我需要使用的PInvoke翻譯成C#結構, 自我指涉結構什麼是「pNext」我應該申報? 謝謝。

回答

2

您可能已經達到p/invoke不是該工作的最佳工具的程度。這裏的複雜性可能會使C++/CLI層成爲更具吸引力的選項。

使用p/invoke,您需要聲明pNext字段爲IntPtr。然後,您需要爲鏈接列表中的每個項目填充結構的一個實例。最後,您需要瀏覽分配給pNext的列表。這將需要你用GCHandle.Alloc來固定每個結構,然後用AddrOfPinnedObject得到固定的地址。一旦通話結束,您需要銷燬所有的GCHandle對象以取消鎖定結構。

所以這是可能的,但代碼可能相當笨拙,可能不是特別有效。您應該認真考慮C++/CLI。