从C++dll访问C#中的一行主要参数

Access to a row-major parameters in C# from C++ dll

本文关键字:一行 参数 访问 C++dll      更新时间:2023-10-16

我试图将坐标系参数从C++dll访问到我的C#项目中。C++中的函数声明如下:

unsigned int GetUCS(IUnknown* document, unsigned int id, double (&frame)[16]);

我需要关于帧参数的帮助,这是一个主要的行:

[Right_x, Up_x, Forward_x, Translation_x]
[Right_y, Up_y, Forward_y, Translation_y]
[Right_z, Up_z, Forward_z, Translation_z]
[0,       0,    0,         1            ]

在我的C#项目中,我必须有这样的东西:

[DllImport("my.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)] 
private static extern uint GetUCS([MarshalAs(UnmanagedType.IUnknown)] object document, uint id, double(frame)?));

接收帧并在此基础上进行一些3D转换。谢谢!

我想我应该使用这样的C#多维数组:

[DllImport("my.dll", CallingConvention = CallingConvention.Cdecl)] 
private static extern uint GetUCS(
[MarshalAs(UnmanagedType.IUnknown)] object document, 
uint id, 
[In, Out] double[,] frame
);

您可以在C#代码中这样分配数组:

double[,] frame = new double[4, 4];

您可以同样使用分配为new double[16]double[] frame,这将与C++代码完全匹配,但您将失去在C#代码中自然访问矩阵的能力。