我有一些简单的方法和一个基本如下所示的 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# 代码中使用此指针。
有没有人给我举个最简单的例子?
最佳答案
您使用的是“不透明”指针……或句柄。您的 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*
和另一个使用 B*
,第一种“方式”可以混合使用 IntPtr
,而第二种则不能)
关于c# - 在 C# 中使用(复杂的)C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653013/