如何将const int * const buffer []导入C#?

时间:2009-02-09 05:56:51

标签: c# pointers pinvoke

这对我来说很棘手。

const int * const buffer[]

目前,我将其翻译如下:

byte[] buffer

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

感谢您的帮助。

4 个答案:

答案 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?谢谢!