110,537
社区成员
发帖
与我相关
我的任务
分享
[DllImport("Dll1.dll", EntryPoint = "add1")]
public static extern int add1(int a,int b);
#ifndef CallReader
#define CallReader __stdcall
#else
#define CallReader __cdecl
#endif
#ifdef READER
#define ReaderDLL extern "C" __declspec(dllexport)
#else
#define ReaderDLL extern "C" __declspec(dllimport)
#endif
ReaderDLL int CallReader ReadAPlus(UCHAR addr, UCHAR block, UCHAR blockCount, UCHAR dataStream[], UCHAR *dataStreamLength, UCHAR maxLen);
ReaderDLL int CallReader ReadAPlus(UCHAR addr, UCHAR block, UCHAR blockCount, UCHAR dataStream[], UCHAR *dataStreamLength, UCHAR maxLen)
{
int packLength = 0, status = 0, ik = 0;
UCHAR packBuffer[128] = {0};
USBHidExitCommunicate();
for(ik=0; ik<3; ik++)
{
status = USBHidInitCommunicate();
if(status == DEVICE_ERROR_OK)
break;
Sleep(10);
}
if(ik == 3)
return DEVICE_ERROR_NO_CONNECT;
packBuffer[0] = 0;
packBuffer[1] = blockCount;
packBuffer[2] = block;
status = USBCommandPacketDataTransfer(addr, 0, CMD_APLUS_HLRead, packBuffer, 9);
if(status)
return status;
status = USBCommandReceivePacketData(packBuffer, &packLength, sizeof(packBuffer));
if(status)
return status;
int dataLength = (packBuffer[OFFSET_DATALENGTH_H] << 8) + packBuffer[OFFSET_DATALENGTH_L] - 1;
if(dataLength > maxLen)
return DEVICE_ERROR_OUT_OF_SIZE;
if(packBuffer[OFFSET_STATUS] != OFFSET_STATION)
return packBuffer[OFFSET_STATUS];
dataStreamLength[0] = dataLength;
memcpy(dataStream, &packBuffer[OFFSET_DATA_BEGIN + 8], dataStreamLength[0]);
return DEVICE_ERROR_OK;
}
C# 调用
[DllImport("ICReader.dll", EntryPoint = "ReadAPlus", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int ReadAPlus(byte addr, byte block, byte blockCount, ref byte dataStream, ref byte dataStreamLength, byte maxLen);