0

这对我来说很棘手。

const int * const buffer[]

目前,我将其翻译如下:

byte[] buffer

问题是当 DLL 使用上述参数调用函数时,我遇到了 AccessViolation 异常。

感谢帮助。

4

4 回答 4

3

有了两个 const肯定应该足以表明您不允许更改它:-)。但是,严肃地说,其中一种状态是指针不应该改变,另一种状态是指针指向的数据不应该改变。

这就是您遇到访问冲突的原因。

您需要做的是将数据复制(而不仅仅是强制转换)到另一个缓冲区,该缓冲区的 const 稍微少一些。提示:Buffer.BlockCopy 是要走的路。

于 2009-02-09T06:05:30.663 回答
1

不是sizeof(int) > sizeof(byte)吗?如果是这样,那么您肯定会遇到问题。

于 2009-02-09T06:29:22.510 回答
1

const 修饰符不会影响 PInvoke 签名,尽管它们可能会影响您处理数据的方式。由于 buffer 参数是一个指向整数的指针数组,因此正确的翻译应该是:

IntPtr[] buffer;
于 2009-02-09T08:53:50.180 回答
0

编辑:它现在可以工作,没有 AccessViolation 异常,但我不知道如何从这样的数组中正确检索数据。

示例文件正在使用这种类型的访问:

buffer[0][i]
buffer[1][i]

但我在缓冲区 [] 中只有 1 个指针。该指针是指向二维数组的指针吗?然后如何将其编组到.NET?谢谢!

于 2009-02-09T15:23:22.833 回答