我尝试从C ++ dll访问坐标系参数到我的C#项目中。C ++中的函数声明如下:
unsigned int GetUCS(IUnknown* document, unsigned int id, double (&frame)[16]);
我需要有关行主要参数frame参数的帮助:
[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];
您同样可以使用分配为double[] frame
的new double[16]
来匹配C ++代码,但是随后您将失去自然访问矩阵的能力。