gpt4 book ai didi

c# - 互操作性 c c# 结构序列

转载 作者:行者123 更新时间:2023-11-28 07:35:09 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com