我收到IntPtr
价值从C++库的方法,我需要从byte[]
阵列从这个收到IntPtr
。当我尝试这样做:IntPtr转换为字节[] c#
byte[] myArray = new byte[Marshal.SizeOf(myReceivedIntPtr)];
Marshal.Copy(myReceivedIntPtr, myArray, 0, Marshal.SizeOf(myReceivedIntPtr));
我收到异常:AccessViolationException
。 我错过了什么?
编辑:
这里是方法名和C++库的头PARAMS:
int MSR_DecodeTrack(char *AscBuff, unsigned char *BinBuff, unsigned char bpc, unsigned char parity, unsigned char ss, unsigned char es);
而且我把它从C#这样:
UInt32 result;
IntPtr myReceivedIntPtr;
IntPtr BinBuff;
byte BPC1 = 7, Parity1 = 1, SS1 = 0x05, ES1 = 0x1F;
result = MSR_DecodeTrack(ref myReceivedIntPtr, ref BinBuff, BPC1, Parity1, SS1, ES1);
这里是其他代码:
byte[] myArray = new byte[Marshal.SizeOf(myReceivedIntPtr)];
Marshal.Copy(myReceivedIntPtr, myArray, 0, Marshal.SizeOf(myReceivedIntPtr));
谷歌帮助没有其他答案吗? http://www.google.co.uk/search?q=Marshal.Copy+AccessViolationException –
Tk1AscBuff的类型是什么? ... Marshal.SizeOf(myReceivedIntPtr)将返回一个IntPtr的大小,通常是4/8字节......你是否计划将一个指针从非托管内存复制到托管数组中? – DarkSquirrel42
Tk1AscBuff被重命名为myReceivedIntPtr,我已经完成了它。那么如何使用IntPtr获取字节数组的大小呢? –