我有一个 C++ DLL,它导出structs
用作输入和输出的函数。
我想从 C# 应用程序调用 DLL。C++ 中的struct
定义如下所示:
struct stIn
{
double A;
double B;
double C;
int D;
double dArray[3];
double dArra2;
double E;
double mat[10][4];
double F;
int G;
}
我已经声明了一个带有该LayoutKind.Sequential
属性的 C# 结构。
结构中的数组是用[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
属性声明的
垫子是用 声明的[MarshalAs(UnmanagedType.SafeArray)]
。
我注意到内存中的数组布局不是按照声明的顺序排列的——数组位于struct
(内存序列是 ABCDEFG、darray 等)的“内存块”的末尾,因此调用 DLL 函数会返回错误的结果。
我错过了什么?垫子声明错了吗?为了将正确的参数序列放入内存,是否需要声明另一个属性?
谢谢。