VB 转 PASCAL,DLL的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 勇者
  • 开始时间 开始时间

勇者

Unregistered / Unconfirmed
GUEST, unregistred user!
Private Declare Function gettxt Lib "kcomm.dll&quot
(ByVal port As Integer,ByVal wait As Integer,ByVal datel As Long,ByVal timel As Long,ByVal fliname As String) As Integer
If gettxt(1,1,010601,123030,"qtsj.txt")=0 Then
Print "pass"
End If

改成DELPHI怎么写
 
Function gettxt (var port: Integer
var wait: Integer
var datel: LongInt
var timel: LongInt
var fliname:PChar): Integer
externel 'kcomm.dll';
If gettxt(1,1,010601,123030,'qtsj.txt')=0 Then
WriteLn('pass');
 
好象不太对
VB里的ByVal应该是传值不是传地址
 
ByVal 一般都是传指针,如果不是的话,去掉 Int 类型的 var 看看
 
试过了也不行,报-65535

1)int gettxt(int port,int wait,long date,long time,file *filename)
功能:采集考勤机的数据到filename指向的文本文件中

返回: 整型
0: 采集正确
1: 所选串行口打不开
2: 不能打开filename文件
3: 无法与考勤机连接
4: 通讯错误
5: 采集正确,日期发送不正确

参数:
port: 整型,与考勤机连接的串口号,值范围1-4.
wait: 整型,传送中的等待时间,该值越大,通讯速度越慢,值范围1-5。
一般情况下,该值设为1,如果出现通讯错误(函数返回4)可将该值设大再试。
date: 长整型,要设置考勤机的日期,格式:年月日,该日期一定要正确。例:010601(01年6月1日).
如果考勤机第一次开启(没有时间),该值将设置考勤中的日期,否则该值不起作用。
time: 长整型,要设置考勤机的时间,格式:时分秒,例:123030(12点30分30秒).
如果考勤机第一次开启(没有时间),该值将设置考勤中的时间,否则该值不起作用。
filename: 字符串,文件名称,存放采集结果的文本文件,如需扩展名,应在filename中指定。
该文本文件的每行为一笔考勤记录,记录格式:卡号+日期+时+分+机号(单机型机号固定为06或50)
如果文件已存在,采集数据添加到文件末尾,不存在,自动建立。
该文件最好为临时文件,如果采集成功,再追加到正式文件中并删除该零时文件
这是他的说明
 
加stdcall试试
 
果然如此,忘了DELPHI参数传递顺序了,谢了
 
答错的都是不了解vb的,想当然了。

VB中integer是16位,32位是long,VB的integer对应于delphi应该是Smallint。
 
后退
顶部