互操作性c#结构序列 我有一个C++ DLL,它输出使用结构> /COD>作为输入和输出的函数。
我想从C#应用程序调用DLL。C++中的互操作性c#结构序列 我有一个C++ DLL,它输出使用结构> /COD>作为输入和输出的函数。,c#,c++,C#,C++,我想从C#应用程序调用DLL。C++中的 Stult定义类似于这样的内容: 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#str
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
结构中的数组是用[marshallas(UnmanagedType.ByValArray,SizeConst=3)]
属性声明的
mat是用[Marshallas(UnmanagedType.SafeArray)]
声明的
我注意到内存中的数组布局与声明的顺序不符-数组位于结构的“内存块”的末尾(内存序列是B C D E F G、darray等),因此对DLL函数的调用返回错误的结果
我错过了什么?mat声明错了吗?为了将正确的参数序列放入内存,是否还需要声明另一个属性
谢谢。感谢shambulator的链接,我意识到错误确实在[,]mat属性中。
它应该被宣布为
[MarshallAs(UnmanagedType.ByValArray,SizeConst=25)]
25是行与列的乘积-mat[5,5]。请在问题中包含C#struct定义正如shf301所说,您需要在问题中包含C#struct定义,但乍一看,SafeArray
不是mat
的正确选择。查看是否有帮助。c#struct:[StructLayout(LayoutKind.Sequential)]public struct stIn{public double A;public double B;public double c;public int D;[MarshalAs(UnmanagedType.ByValArray,SizeConst=3)]public double[]dArray;public double dar2;public double E;[MarshalAs(UnmanagedType.SafeArray)]public double[,]mat;公共双F;公共int G;}