C ++ / C#互操作性类型转换

时间:2015-07-07 13:05:57

标签: c# c++ marshalling

我正在开发一个使用dll驱动文件的程序。我成功地将dll链接到我的代码中但是有一个方法有问题

Dll功能:

word NdEnumDevices(const char* const ** devs);

我已经将它与c#这样的

联系起来了
[DllImport("NeurobitDrv.dll")]
    public static extern ushort NdEnumDevices(ref string[] devs);

由于我没有多少C ++经验,所以我真的不明白const char* const ** devs的含义。我肯定知道这个参数接收一个字符串数组但我只得到一个应该是3

的元素

并抛出Access违例异常

有人能告诉我应该在c#??

中使用什么类型

我已经解决过这个问题,只是使用设备名称对字符串数组进行了硬编码,它运行得很好:D

1 个答案:

答案 0 :(得分:0)

const char* const ** devs可能与const char* const *devs[]相同,而

pointer to 
  an array of
    constant pointers to
      constant characters.

这很可能是由ref造成的(尽管我对此并不太确定)。可以将ref到字符串数组编译为指向字符串数组的指针。

正如this问题中指出的那样,您可以安全地使用const char*

我认为你可能缺少的是数组的长度。该函数应声明为

word NdEnumDevices(const char* devs[], unsigned int length);
// C#
[DllImport("NeurobitDrv.dll")]
private static extern ushort NdEnumDevices(string[] devs, UInt32 length);

public static ushort NdEnumDevices(string[] devs) {
    NdEnumDevices(devs, devs.Length); // Delegate for length
}