vb调用dll的问题
用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 Explicit
Public 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 Sub
Private 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,我错在什么地方啊。 --------------------编程问答-------------------- 你先跟踪代码,看问题出在哪一句上,比如第一句在delphi里输入的是什么?返回的又是什么?
你VB里的结果是否一致?
这样就可以找到是哪一句的问题,然后一句一句的解决便可。 --------------------编程问答-------------------- 现在问题是不报错,就正常调用函数,但是返回值不正确。我在vb中追踪过代码,没发现有价值的东西。 --------------------编程问答-------------------- 看来你还不知道如何调试程序 --------------------编程问答-------------------- 看得不是很明白 --------------------编程问答-------------------- to SupermanKing
能给讲讲怎么才算调试程序么? --------------------编程问答-------------------- dll是二进制的文件,什么编译器都是可以调用的! --------------------编程问答-------------------- --------------------编程问答-------------------- 编写dll是用什么语言写的,若不是VB应该看一下不同语言之间的类型对应关系!我以前也调用过VC写的dll,它们之间的数据类型就不一样! --------------------编程问答-------------------- 返回值 Boolean 改用integer试试
--------------------编程问答--------------------
Public Declare Function GetReadCardPort Lib "PReadcardDll.dll" (errcode As Long, aCom As Long) As Byte
Public Declare Function CloseReadCardPort Lib "PReadcardDll.dll" (aCom As Long) As Byte
--------------------编程问答-------------------- vb的integer是16位符号整数,和C,dephi的integer是不同的,他们的int类型是32位无符号整数.
这个在msdn里面也有.
顶ls --------------------编程问答-------------------- 你调用的DLL是用什么语言写的,可能不一样呢
补充:VB , 基础类