type SCARD_READERSTATE_A
szReader as string
pvUserData as long
dwCurrentState as long
dwEventState as long
cbAtr as long
rgbAtr(35) as long  '0 to 35
end type

解决方案 »

  1.   

    因为传递到rgReaderStates参数实际是一个指针,所以可以定义为ANY类型,然后把SCARD_READERSTATE_A类型变量传递过去。
      

  2.   

    type SCARD_READERSTATE_A
    szReader as string*256
    pvUserData as long
    dwCurrentState as long
    dwEventState as long
    cbAtr as long
    rgbAtr(35) as long  
    end type
    VB会自动转换成指针的!
      

  3.   

    myhfit() 、mjcom(不明飞行物) :
      rgbAtr(35) as long  '0 to 35
    是否应为
      rgbAtr(35) As Byte我的声明和引用如下:
    Type SCARD_READERSTATE_A
      szReader As String * 255 '定长和不定长都试过
      pvUserData As Long
      dwCurrentState As Long
      dwEventState As Long
      cbAtr As Long
      rgbAtr(35) As Byte       '试过as long,也不行。而且我觉得更不合理
    End Type
    Public myReaderstate As SCARD_READERSTATE_ADeclare Function SCardGetStatusChangeA Lib "winscard.dll" ( _
            ByVal hContext As Long, _
            ByVal dwTimeout As Long, _
            ByRef rgReaderStates As Any, _
            ByRef cReaders As Long) As LongmyReaderstate.szReader = curReader
    myReaderstate.dwCurrentState = SCARD_STATE_UNAWARE '0
    myReaderstate.pvUserData = 0&
    DataLen = Len(curReader)
    RetVal = SCardGetStatusChangeA(hCntxt, &HFFFFFFFF, myReaderstate, DataLen)但得到错误返回:
    One or more of the supplied parameters could not be properly interpreted
      

  4.   

    问题解决了:
    Type SCARD_READERSTATEA
        szReader        As String
        pvUserData      As Long
        dwCurrentState  As Long
        dwEventState    As Long
        cbAtr           As Long
        rgbAtr(35)      As Byte
    End TypePublic Declare Function SCardGetStatusChangeA Lib "winscard.dll" _
        (ByVal hContext As Long, _
         ByVal dwTimeout As Long, _
         ByRef rgReaderStates As SCARD_READERSTATEA, _
         ByVal cReaders As Long) As Long