来自C ++的自引用结构的PInvoke

时间:2015-12-24 03:17:08

标签: pinvoke

以下是来自C ++的自引用结构

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

我需要使用PInvoke转换为C#struct, 什么是" pNext"我应该申报? 谢谢。

1 个答案:

答案 0 :(得分:2)

你可能已经达到了p / invoke不是这项工作的最佳工具的程度。这里的复杂性可能使C ++ / CLI层成为更具吸引力的选择。

使用p / invoke,您需要将pNext字段声明为IntPtr。然后,您需要为链接列表中的每个项目填充结构的一个实例。最后,您需要遍历分配给pNext的列表。这将要求您使用GCHandle.Alloc固定每个结构,然后使用AddrOfPinnedObject获取固定地址。一旦调用完成,您就需要销毁所有GCHandle个对象以取消对结构的固定。

所以可以做到,但代码可能相当笨拙,可能效率不高。您应该认真考虑C ++ / CLI。