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

问题描述 投票:0回答:1

我尝试从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# c++ pinvoke marshalling
1个回答
0
投票

我想我会使用像这样的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[] framenew double[16]来匹配C ++代码,但是随后您将失去自然访问矩阵的能力。

© www.soinside.com 2019 - 2024. All rights reserved.