从 C++ 调用自引用结构

PInvoke of self referential struct from C++

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

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

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

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

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

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