0
我有一个C++ DLL,它导出使用structs
作为输入和输出的函数。互操作性c c#结构序列
我想从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#结构。
在struct所述阵列被声明用[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
属性
垫被声明用[MarshalAs(UnmanagedType.SafeArray)]
。
我注意到内存中的数组布局不是按照声明的顺序 - 数组位于struct
(内存序列是ABCDEFG,darray等)的“内存块”的末尾,并因此调用DLL函数返回错误的结果。
我错过了什么?垫子声明是否错误?是否有另一个属性来声明为了获得正确的参数序列到内存中?
谢谢。
请在您的问题中包含您的C#结构定义 – shf301
正如shf301所说,您需要在您的问题中包含C#结构定义,但乍一看,SafeArray不是'mat'的正确选择。看看[这个答案](http://stackoverflow.com/a/6197651/351301)有帮助。 – shambulator
c#struct:[StructLayout(LayoutKind.Sequential)] public struct stIn {public double A;公共双B;公共双C; public int D; [MarshalAs(UnmanagedType.ByValArray,SizeConst = 3)] public double [] dArray; public double dArr2;公共双E; [MarshalAs(UnmanagedType.SafeArray)] public double [,] mat;公共双F; public int G;} – user346134