将IntPtr转化成byte[],该怎么解决
将IntPtr转化成byte[]
Dll函数原型:
BOOL UsbScan_ExchangData(PUCHAR pDataBuf, DWORD& dwDataLen , DWORD dwCtl);
调用方式:
[DllImport("MDcs.dll")]
private static extern bool UsbScan_ExchangData(byte[] pDataBuf, ref UInt32 dwDataLen, UInt32 dwCtl);
//检查设备存在功能
public bool IsValid(UIntPtr hDevDropEvent)
{
bool bRet = false;
UInt32 byLen = 0;
//bRet = UsbScan_ExchangData(???????????????, ref byLen, API_USBSCAN_DEVEXIT);
return bRet;
}
请问注释部分如何进行传递?
vc调用的函数如下:
BOOL CUScanDriver::IsValid(HANDLE hDevDropEvent)
{
BOOL bRet = FALSE;
ULONG dwLen;
bRet = m_Func( (PUCHAR)&hDevDropEvent,dwLen,API_USBSCAN_DEVEXIT);
return bRet;
}
------解决方案--------------------
至于题目上的问题:将IntPtr转化成byte[]
用Marshall类,满足你的要求哟~~
------解决方案--------------------
Dll函数原型:
BOOL UsbScan_ExchangData(PUCHAR pDataBuf, DWORD& dwDataLen , DWORD dwCtl);
调用方式:
[DllImport("MDcs.dll")]
private static extern bool UsbScan_ExchangData(byte[] pDataBuf, ref UInt32 dwDataLen, UInt32 dwCtl);
//检查设备存在功能
public bool IsValid(UIntPtr hDevDropEvent)
{
bool bRet = false;
UInt32 byLen = 0;
//bRet = UsbScan_ExchangData(???????????????, ref byLen, API_USBSCAN_DEVEXIT);
return bRet;
}
请问注释部分如何进行传递?
vc调用的函数如下:
BOOL CUScanDriver::IsValid(HANDLE hDevDropEvent)
{
BOOL bRet = FALSE;
ULONG dwLen;
bRet = m_Func( (PUCHAR)&hDevDropEvent,dwLen,API_USBSCAN_DEVEXIT);
return bRet;
}
------解决方案--------------------
至于题目上的问题:将IntPtr转化成byte[]
用Marshall类,满足你的要求哟~~
------解决方案--------------------
- C# code
public static bool IsValid(IntPtr hDevDropEvent) { bool bRet = false; UInt32 byLen = 0; Byte[] bufHandle = new Byte[IntPtr.Size]; GCHandle gch = GCHandle.Alloc(bufHandle, GCHandleType.Pinned); //固定托管内存 Marshal.WriteIntPtr(Marshal.UnsafeAddrOfPinnedArrayElement(bufHandle, 0), hDevDropEvent); bRet = UsbScan_ExchangData(bufHandle, ref byLen, API_USBSCAN_DEVEXIT); gch.Free(); return bRet; }