C#调用C++结构体(结构体有指针成员),如何调用

C++中定义为
struct BoundaryTriangle
{
public:
int* Best;
char* Address;
int Index;
};
在C#中如何定义
[StructLayout(LayoutKind.Sequential)]
public struct BoundaryTriangle
{
public int Index;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 4)]
public int[] Best;
[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 9)]
public string Address;
}
我是这样定义的,没有报错,但结果不对
最新回答
山水闲人

2024-05-16 04:21:00

1、因为结构体里都是指针,所以用ByVal是不正确的。ByVal在结构体里是数组的时候可以用
2、知道Best数组的大小吗?不知道的话,可能只能用IntPtr。然后在需要数据访问的时候Marshal.Copy出来。知道的话,可以用LPArray
3、顺序错了。Best放在第一个,Address放在第二个,Index放在第三个
4、Address的MarshalAs中,类型应该用LPStr
追问
首先谢谢你的回答,在这个程序中,Best的大小是知道的,但Address的大小不确定,Address应该如何处理呢?(Best的大小为4,Address长度不确定,能否给出C#中的完整代码呢)