本人现在作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

解决方案 »

  1.   

    不论什么进制的表达,内存的数据都是一样的
    所以没这个问题的除非你的DLL接口是自己定义的格式,这个根据Manual 自己Debug看了eg:
    mov eax, 110001b
    mov eax, 012abH
    mov eax, 300http://lysoft.7u7.net
      

  2.   

    [OUT]返回的值,16进制,低字节在前这句话说明这个返回值和一般PC上的long型字节顺序相同
    你传得话就传一个和它的long型数据匹配的Delphi类型变量的指针过去就行了
      

  3.   

    不好意思:贴错了,是下面这个功能:将Mifare One 卡某一块初始化为钱包 
    原型: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
      

  4.   

    比如你要定义一个integer类型常量A,你可以写成
    const A=255;
    也可以写成const A=$FF
    这只是在设计期表现形式不一样,编译期对电脑来说都是二进制11111111。
    也就是说你输入这个Value值时,假设为255,你直接写255或写$FF是一样的。不需要转换。
    不过你这个函数要注意的PValue低字节在前。Long整数类型读入内存后,是按低字节在前,高字节在后排列,但是函数说明的输入时低字节就在前,也就是你输入$FFAA(65450)要写成$AAFF(43775)。