Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
互操作性c#结构序列 我有一个C++ DLL,它输出使用结构> /COD>作为输入和输出的函数。_C#_C++ - Fatal编程技术网

互操作性c#结构序列 我有一个C++ DLL,它输出使用结构> /COD>作为输入和输出的函数。

互操作性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

我想从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#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;}