c#结构序列的互操作性
Interoperability c c# struct sequence
我有一个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)]
声明mat
我注意到内存中的数组布局不符合声明的顺序-数组位于struct
的"内存块"的末尾(内存序列是A B C D E F G,数组等),因此调用DLL函数返回错误的结果。
我错过了什么?垫子申报有问题吗?是否有另一个属性声明,以获得正确的参数序列进入内存?
谢谢。
感谢shambulator的链接,我已经意识到错误确实在[,]mat属性中。它应该被声明为[MarshallAs UnmanagedType。ByValArray, size = 25)]25行与列相乘- mat [5,5].
相关文章:
- COM 互操作性需要强命名程序集吗?
- CComPtr 和 std::shared_ptr 互操作性
- COM 互操作结构定义与内存布局不匹配
- C和C++原子之间的互操作性
- C/C++ 与 C# 的互操作性命名约定
- C和C++中类型的互操作性
- C++与Fortran的互操作性
- 关于C#与非托管C++的互操作性的持续传奇
- java和c++的互操作性
- 如何从C++和通过COM互操作性访问.NET类的属性
- OpenCL/OpenGL 互操作性纹理段错误
- Swift和Objective-C++互操作性
- Windows XP和Windows 7之间的DCOM互操作性
- 寻找C++到 WPF/Cocoa 互操作性的跨平台、端到端示例
- QML 和 C++ 映像互操作性
- GNU Fortran与C的互操作性
- linux时区互操作性
- VS 2012与VS 2010的互操作性
- 互操作性的工作原理
- c#结构序列的互操作性