用vb做的程序,调用厂家的dll文件,访问读卡器,厂家给出了dll中的函数,参数和类型,但就是不工作,这是为什么呢?估计函数是用delphi写的,厂家给了个delphi的实例函数,一切正常,把代码贴出来,专家帮忙给看看。
接口函数
  函数传递参数方式stdcall;1、 function GetReadCardPort(var ErrCode:integer;aCom : integer):boolean;stdcall;
打开aCom端口,连接读卡器。可打开多个串口进行数据接收
返回:函数调用成功;
ErrCode返回值: 1 - ic读卡器连接成功  0-id读卡器连接成功  22 – 已经连接成功
              其他 - 读卡器连接失败
2、 function CloseReadCardPort(aCom : integer):boolean;
关闭打开串口。以上部分函数说明Option ExplicitPublic Declare Function GetReadCardPort Lib "PReadcardDll.dll" (errcode As Integer, aCom As Integer) As Boolean
Public Declare Function CloseReadCardPort Lib "PReadcardDll.dll" (aCom As Integer) As Boolean模块中的引用部分Private Sub Command1_Click()
        Call GetReadCardPort(errcode, Text1.Text)
        MsgBox errcode
End SubPrivate Sub Form_Load()
    For i = 1 To 20
        Call CloseReadCardPort(i)
        Call GetReadCardPort(errcode, i)
        info = info & "com" & i & ":" & errcode & Chr(13) & Chr(10)
    Next
    Label1.Caption = info
End Sub
这两种方法返回都是0,这是为什么
我的读卡器接在com9上,在硬件中能看见,用厂家的实例程序也能返回正确的1,我错在什么地方啊。

解决方案 »

  1.   

    你先跟踪代码,看问题出在哪一句上,比如第一句在delphi里输入的是什么?返回的又是什么?
    你VB里的结果是否一致?
    这样就可以找到是哪一句的问题,然后一句一句的解决便可。
      

  2.   

    to SupermanKing
    能给讲讲怎么才算调试程序么?
      

  3.   

    dll是二进制的文件,什么编译器都是可以调用的!
      

  4.   

    编写dll是用什么语言写的,若不是VB应该看一下不同语言之间的类型对应关系!我以前也调用过VC写的dll,它们之间的数据类型就不一样!
      

  5.   

    返回值 Boolean 改用integer试试
      

  6.   


    Public Declare Function GetReadCardPort Lib "PReadcardDll.dll" (errcode As Long, aCom As Long) As BytePublic Declare Function CloseReadCardPort Lib "PReadcardDll.dll" (aCom As Long) As Byte
      

  7.   

    vb的integer是16位符号整数,和C,dephi的integer是不同的,他们的int类型是32位无符号整数.这个在msdn里面也有.顶ls
      

  8.   

    你调用的DLL是用什么语言写的,可能不一样呢