【问题标题】:Calling C++ method in C#在 C# 中调用 C++ 方法
【发布时间】:2015-02-03 06:54:09
【问题描述】:

我需要从 c# 调用一个 c++ 函数。

c++函数是

BOOL Usb_GetDevicesList(int &iNbDevices, char aszDeviceName[][128]);

我试过了

  [DllImport("UsbComm.dll", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
        public static extern int Usb_GetDevicesList(int iNbDevices, out byte[][] aszDeviceName);

我有错误

无法编组“参数 #2”:没有编组支持 嵌套数组。

请帮助我将此 c++ 函数转换为 C#。

【问题讨论】:

  • 大概iNbDevices 包含输入时提供的数组aszDeviceName 的长度,以及退出时写入数组的项目数?如果提供的数组不够长,则返回 FALSE。除非您还解释了函数的语义,否则很难提供帮助。

标签: c# c++ pinvoke


【解决方案1】:

您可以将二维数组展平为一维数组,然后将其传递。

 flattened_array[(y * width) + x] = source[x][y];

参考this answer

【讨论】:

  • 您还需要更改 C++ 函数以接受扁平的二维数组。
  • 我们不能改变 C++ 函数
  • 在这种情况下看看这个:stackoverflow.com/questions/18705857/…
  • 谢谢..你拯救了我的一天
  • @AkashPradhan C++ 函数不需要更改。
猜你喜欢
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 2010-10-09
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多