以下是来自C ++的自引用结构
typedef struct _FCV
{
unsigned long ulID;
unsigned long ulVersion;
unsigned long ulStatus;
unsigned long ulSize;
struct _FCV* pNext;
} FCV;
我需要使用PInvoke转换为C#struct, 什么是" pNext"我应该申报? 谢谢。
答案 0 :(得分:2)
你可能已经达到了p / invoke不是这项工作的最佳工具的程度。这里的复杂性可能使C ++ / CLI层成为更具吸引力的选择。
使用p / invoke,您需要将pNext
字段声明为IntPtr
。然后,您需要为链接列表中的每个项目填充结构的一个实例。最后,您需要遍历分配给pNext
的列表。这将要求您使用GCHandle.Alloc
固定每个结构,然后使用AddrOfPinnedObject
获取固定地址。一旦调用完成,您就需要销毁所有GCHandle
个对象以取消对结构的固定。
所以可以做到,但代码可能相当笨拙,可能效率不高。您应该认真考虑C ++ / CLI。