在c#中使用(复杂)c结构

时间:2015-04-15 14:29:37

标签: c# c

我有一些简单的方法和C struct基本上是这样的:

struct A
{
   B* b;
   C* c;
   int d;
}

void createA(A** a);
void freeA(A** a);
int doCrazyStuff(A* a);

在某种程度上,我不关心C#代码中的结构。我只想创建一个A指针,并通过C方法在C#代码中使用这个指针。

有没有人为我提供最小的例子?

1 个答案:

答案 0 :(得分:2)

您使用的是“不透明”指针......或句柄。您的C#程序不知道A*是什么,并且不知道它。

您可以直接使用IntPtr,如下所示:

void createA(out IntPtr a);
void freeA(ref IntPtr a);
int doCrazyStuff(IntPtr a);

为了保证类型安全,你可以:

[StructLayout(LayoutKind.Sequential)]
public struct MyA
{
    public IntPtr Ptr;
}

void createA(out MyA a);
void freeA(ref MyA a);
int doCrazyStuff(MyA a);

它不会改变任何东西,但是如果你有多个不透明的引用,那么你将无法混合它们(如果你有两组方法,一组使用A*而另一组使用{ {1}},第一种“方式”可以混合B*,而第二种方式却不能混合使用)