我正在尝试使用 pinvoke 编组从 C 到 C# 的另一个结构内的结构数组。AFAIK,没有办法。
因此,相反,在 C 结构中,我向我的数组和 malloc 声明了一个 ptr。问题:1)如何在 C# 端声明等价物?2) 如何在 C# 端分配和使用等价物?
//The C code
typedef struct {
int a;
int b; } A;
typedef struct {
int c;
// A myStruct[100]; // can't do this, so:
A *myStruct; } B;
//The c# code:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class A{
int a;
int b;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class B{
int c;
// can't declare array of [100] A structures...
?
}
[编辑]:不知何故,我误解了我在其他地方读到的关于 c# 端的固定对象数组的内容。而且我可以在 C 中修复数组大小所以编译好了,但是在使用时我得到“对象引用未设置为对象的实例”:
data.B[3].a = 4567;
因此,在其他地方阅读此错误可能是什么时,我添加了此方法:
public void initA()
{
for (int i = 0; i < 100; i++) { B[i] = new A(); }
}
同样,编译正常,但同样的错误消息。