本人现在作m1 S50 IC程序时 遇到这样一个dll函数功能:读取Mifare One卡钱包值
原型:int WINAPI rf_M1_readval(unsigned short icdev,
unsigned char block,
long *pValue)
参数:icdev: [IN] 通讯设备标识符
block: [IN] M1卡绝对块号
pValue: [OUT]返回的值,16进制,低字节在前
返回:成功返回0 我在delphi中应如何声明
另外它好像让我传16进制的值,用IntToHex可以将十进制数->十六进制数,但转换后的十六进制数是字符串例'$4A',我如何将'$4A' 转换成 $4A
原型:int WINAPI rf_M1_readval(unsigned short icdev,
unsigned char block,
long *pValue)
参数:icdev: [IN] 通讯设备标识符
block: [IN] M1卡绝对块号
pValue: [OUT]返回的值,16进制,低字节在前
返回:成功返回0 我在delphi中应如何声明
另外它好像让我传16进制的值,用IntToHex可以将十进制数->十六进制数,但转换后的十六进制数是字符串例'$4A',我如何将'$4A' 转换成 $4A
所以没这个问题的除非你的DLL接口是自己定义的格式,这个根据Manual 自己Debug看了eg:
mov eax, 110001b
mov eax, 012abH
mov eax, 300http://lysoft.7u7.net
你传得话就传一个和它的long型数据匹配的Delphi类型变量的指针过去就行了
原型:int WINAPI rf_M1_initval(unsigned short icdev,
unsigned char block,
long value)
参数:icdev: [IN] 通讯设备标识符
block: [IN] M1卡绝对块号
pValue: [IN] 初始金额,16进制,低字节在前
返回:成功返回0 它好像让我传16进制 我能不能直接传 10进制的表示, 因为我不知道如何将 '$4A' 转换成 $4A
const A=255;
也可以写成const A=$FF
这只是在设计期表现形式不一样,编译期对电脑来说都是二进制11111111。
也就是说你输入这个Value值时,假设为255,你直接写255或写$FF是一样的。不需要转换。
不过你这个函数要注意的PValue低字节在前。Long整数类型读入内存后,是按低字节在前,高字节在后排列,但是函数说明的输入时低字节就在前,也就是你输入$FFAA(65450)要写成$AAFF(43775)。