我有一些简单的方法和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#代码中使用这个指针。
有没有人为我提供最小的例子?
答案 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*
,而第二种方式却不能混合使用)