void * DLL OPEN_USB(unsigned char * ReaderName)
需定义: char * ReaderName[1024]
作用:打开OMNIKEY读卡器
返回: SCARDCONTEXT型 句柄,-1读卡器连接错误int readinfo(void * hCard,char * szNumber,char * szName)
参数:
hCard:OPEN_USB返回的句柄
szNumber:返回卡号
szName:返回姓名
返回:0正确,-7 读卡错误int CLOSE_USB(void * hSC)
参数:
hSC:OPEN_USB返回的句柄
返回:0正确,其他错误VB中我是以下定义的
Public Declare Function OPEN_USB Lib "Card.dll" (ByVal ReaderName As String) As Variant
Public Declare Function readinfo Lib "Card.dll" (ByVal hCard As Variant, ByVal szNumber As String, ByVal szName As String) As Integer
Public Declare Function CLOSE_USB Lib "Card.dll" (ByVal hSC As Variant) As Variant可是操作OPEN_USB说找不到文件。不知道VB定义有没有问题,如何调用。谢谢。

解决方案 »

  1.   

    Public Declare Function OPEN_USB Lib "Card.dll" (ByVal ReaderName As String) As Long
    Public Declare Function readinfo Lib "Card.dll" (hCard As Any, ByVal szNumber As String, ByVal szName As String) As Long
    Public Declare Function CLOSE_USB Lib "Card.dll" (hSC As Any) As Long
      

  2.   

    Public Declare Function OPEN_USB Lib "Card.dll" (ByVal ReaderName As String) As Long 
    Public Declare Function readinfo Lib "Card.dll" (ByVal hCard As Long, ByVal szNumber As String, ByVal szName As String) As Long 
    Public Declare Function CLOSE_USB Lib "Card.dll" (ByVal hSC As Long) As Long 
    试试.
      

  3.   

    void * DLL OPEN_USB(unsigned char * ReaderName)
    需全局定义: char * ReaderName[1024]
    作用:打开OMNIKEY读卡器
    返回: SCARDCONTEXT型 句柄,-1读卡器连接错误
    int readinfo(void * hCard,unsigned char * ReaderName,char * szNumber,char * szName,unsigned long * ulSerNo)
    参数:
    hCard:OPEN_USB返回的句柄
    ReaderName:OPEN_USB函数带入的ReaderName返回的值
    szNumber:返回卡号
    szName:返回姓名
    ulSerNo:返回的卡流水号{注意:ulSerNo带入的时候最好是带地址。
    例如:
    long a;
    readinfo(hCard,ReaderName,szNumber,szName,(unsigned long *)&a);
    }
    返回:0正确,-7 读卡错误
    int CLOSE_USB(void * hSC)
    参数:
    hSC:OPEN_USB返回的句柄
    返回:0正确,其他错误内容有点变化
      

  4.   

    虽然只有20分,但还是帮楼主解答一下吧:vb的string是BSTR格式,而且默认为unicode格式。这里不能直接传string,应该用byte()接住转换成MBCS的数组,然后将byte数组传过去。
      

  5.   

    是否如下定义,可是总提示无法找到文件
    Public Declare Function OPEN_USB Lib "Card.dll" (ByRef ReaderName As Byte) As Long
    Public Declare Function readinfo Lib "Card.dll" (ByVal hCard As Long, ByRef ReaderName As Byte, szNumber As Byte, szName As Byte, ulSerNo As Long) As Long
    Public Declare Function CLOSE_USB Lib "Card.dll" (ByVal hSC As Long) As Long
      

  6.   

    http://topic.csdn.net/u/20090309/16/2f607d2a-5dba-44d7-a333-188b73415533.html
    http://topic.csdn.net/u/20080504/19/c5032083-8b33-4e54-ba93-1b854e27cac4.html
      

  7.   

    使用String不会存在问题,作为DLL参数的兼容,VB自己会做转换处理。
      

  8.   

    to楼主,“无法找到文件”不一定是你的VB声明有问题,而是有可能找不到"Card.dll"那个文件。你确定肯定及一定你那个dll文件能被找到么?
      

  9.   

    想起来我遇到过的一个现象:DLL无法被正常加载,VB也报的是"找不到文件".尝试使用loadlibrary加载DLL查看返回值.一般来说,有可能是DLL依存环境不正常.....
      

  10.   


    测试了一下,你是对的。看来VB6这方面还是比较体贴。
    另外楼主的问题:
    1。声明中指定绝对路径测试一下2。绝对路径还是找不到,安装VC8,VC9运行库:(可能这个dll是高版本VC编译的并且使用动态dll链接并且依赖清单文件,需要依赖严格版本的VC运行库)
    http://www.microsoft.com/downloads/details.aspx?familyid=32bc1bee-a3f9-4c13-9c99-220b62a191ee&displaylang=en
    http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en3。如果指定绝对路径能找到,那可能是系统搜索不到你程序的同一目录下的dll了,可能是system32下有同名dll(可能性很小)
      

  11.   

    问题解决。
    重新写了一个DLL文件。
    myjian让我发现我的DLL文件不能加载,
    yk84让我发现我的DLL文件VC版本不对无法加载进来。
    各给10分。
    谢谢大家的的帮助。