作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
的“内存块”的末尾(内存顺序是 A B C D E F G 、darray 等),因此调用 DLL 函数会返回错误结果。
我错过了什么?垫声明错误吗?为了将正确的参数序列放入内存,是否需要声明另一个属性?
谢谢。
最佳答案
感谢 shambulator 的链接,我意识到错误确实在 [,] mat 属性中。它应该声明为[MarshallAs(UnmanagedType.ByValArray, SizeConst = 25)]25 行与列相乘 - mat [5,5]。
关于c# - 互操作性 c c# 结构序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16887241/
我是一名优秀的程序员,十分优秀!