【问题标题】:How to import const int * const buffer[] into C#?如何将 const int * const buffer[] 导入 C#?
【发布时间】:2009-02-09 05:56:51
【问题描述】:

这对我来说很棘手。

const int * const buffer[]

目前,我将其翻译如下:

byte[] buffer

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

感谢您的帮助。

【问题讨论】:

    标签: c# pointers pinvoke


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 它们可能会使字节数组大四倍。这是我的猜测。
      【解决方案3】:

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

      IntPtr[] buffer;
      

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

        • 请使用更新的信息编辑您的原始问题。这不是答案。 :)
        猜你喜欢
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 2010-11-11
        相关资源
        最近更新 更多