我正在开发一个使用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
答案 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
}