这对我来说很棘手。
const int * const buffer[]
目前,我将其翻译如下:
byte[] buffer
问题是当 DLL 使用上述参数调用函数时,我遇到了 AccessViolation 异常。
感谢帮助。
有了两个 const
肯定应该足以表明您不允许更改它:-)。但是,严肃地说,其中一种状态是指针不应该改变,另一种状态是指针指向的数据不应该改变。
这就是您遇到访问冲突的原因。
您需要做的是将数据复制(而不仅仅是强制转换)到另一个缓冲区,该缓冲区的 const 稍微少一些。提示:Buffer.BlockCopy 是要走的路。
不是sizeof(int) > sizeof(byte)
吗?如果是这样,那么您肯定会遇到问题。
const 修饰符不会影响 PInvoke 签名,尽管它们可能会影响您处理数据的方式。由于 buffer 参数是一个指向整数的指针数组,因此正确的翻译应该是:
IntPtr[] buffer;
编辑:它现在可以工作,没有 AccessViolation 异常,但我不知道如何从这样的数组中正确检索数据。
示例文件正在使用这种类型的访问:
buffer[0][i]
buffer[1][i]
但我在缓冲区 [] 中只有 1 个指针。该指针是指向二维数组的指针吗?然后如何将其编组到.NET?谢谢!