我必须调用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函数,因为通常情况下,应该有指向数组的第一个元素的指针 - 或者我错了? 非常感谢你提前了!