字节*到字节[]转换中的“读/写保护存储器”异常

时间:2017-10-10 17:19:20

标签: c# c++ pointers dll marshalling

我必须调用c ++ .dll函数并从中获取16个字节,但是它有一些麻烦:(

我使用DLLImport的.dll函数如下:

public static extern int ZBRGPMF_CCC_Read(IntPtr hPrinter, int 
printerType, byte cardType, byte blockNumber, byte authentication, out 
IntPtr data, out IntPtr dataSize, out int err);

这是.dll函数的描述,也许我在包装器中也出错了

  

语法:   int ZBRGPMF_Read(   处理hPrinter,   int printerType,   字节卡类型,   byte blockNumber,   byte * dataBlock,   int * dataBlockSize,   int * err)

基本上,通过调试下的代码(通过断点)我能够看到我需要的数据并且它是正确的 - 但不幸的是,如果我尝试以某种方式操作这个字节* - 我有异常“尝试读/写受保护的记忆“。 我已经尝试过使用Marshall.Copy。

byte[] arr = new byte[16];
IntPtr dataInSector = (IntPtr)(arr[0]);

//pretty sure, this is wrong
IntPtr length = (IntPtr)16;

if (PrinterHelper.ZBRGPMF_CCC_Read(hPrinter, printerType, 0, 
sectorToRead, authentication, out dataInSector, out length, out err) != 
0)
{
    unsafe
    {
        byte* bbbb = (byte*)dataInSector;

        // convert byte* to byte[] here
    }
}

我认为我错误地使用了这个dll函数,因为通常情况下,应该有指向数组的第一个元素的指针 - 或者我错了? 非常感谢你提前了!

0 个答案:

没有答案