这对我来说很棘手。
const int * const buffer[]
目前,我将其翻译如下:
byte[] buffer
问题是,当DLL使用上面的参数调用函数时,我得到了AccessViolation异常。
感谢您的帮助。
答案 0 :(得分:3)
两个 const
肯定应该足够指示您不允许更改它:-)。但是,严重的是,其中一个指针不应该改变,另一个指出指针指向的数据不应该改变。
这就是您获得访问权限的原因。
您需要做的是复制,而不仅仅是将数据转换为另一个缓冲区,而这个缓冲区的const值稍差。提示:Buffer.BlockCopy是要走的路。
答案 1 :(得分:1)
不是sizeof(int) > sizeof(byte)
?如果是这样,那么你肯定会遇到问题。
答案 2 :(得分:1)
const修饰符不会影响PInvoke签名,但它们可能会影响您处理数据的方式。由于buffer参数是指向整数的指针数组,因此正确的转换将是:
IntPtr[] buffer;
答案 3 :(得分:0)
编辑:它现在有效,没有AccessViolation异常,但我不知道如何从数组中正确检索数据。
示例文件正在使用此类访问:
buffer[0][i]
buffer[1][i]
但我在缓冲区[]中只有一个指针。那个指针是指向二维数组的指针?如何将它编组到.NET?谢谢!