关于调用VC写的DLL调用失败的问题 |
答題得分者是:Skyer
|
wxc189
一般會員 發表:4 回覆:7 積分:2 註冊:2002-11-23 發送簡訊給我 |
|
Skyer
高階會員 發表:43 回覆:111 積分:120 註冊:2002-04-04 發送簡訊給我 |
|
wxc189
一般會員 發表:4 回覆:7 積分:2 註冊:2002-11-23 發送簡訊給我 |
Skyer 你好,是这样的,我可以调用DLL的函数,只是不能正确的使用
下面是VB的一些代码,DLL.bas Attribute VB_Name = "Module3"
Option Explicit
Public Type INITTBL
speed As Long '4:19200bps
length As Long '0:8bit
parity As Long '
sbit As Long '1:1bit
ptout As Long
ctout As Long
cretry As Long
stopkey1 As Long
stopkey2 As Long
End Type
Public Type CINFTBL
htid As String * 6
htdmy As String * 2
adv As Long
fileno As Long
filesize As Long
jobcmd As Long
datatype As Long
End Type Public Declare Function hst_idtblclr Lib "hostcm32.dll" () As Integer '清除ID表
Public Declare Function hst_idtbladd Lib "hostcm32.dll" (ByVal iddata As String) As Integer '清除ID表
Public Declare Function hst_open Lib "hostcm32.dll" (ByVal chno As Long, initab As INITTBL) As Integer '清除ID表
Public Declare Function hst_close Lib "hostcm32.dll" () As Integer '清除ID表
Public Declare Function hst_polling Lib "hostcm32.dll" (recno As Long, ByVal ioboxno As Long) As Integer '轮寻
Public Declare Function hst_idtblgetidno Lib "hostcm32.dll" () As Integer '清除ID表
Public Declare Function hst_getcinffirst Lib "hostcm32.dll" (inftab As CINFTBL) As Integer '清除ID表
Public Declare Function hst_getcinfnext Lib "hostcm32.dll" (inftab As CINFTBL) As Integer '清除ID表
Public Declare Function hst_filerecv Lib "hostcm32.dll" (ByVal pname As String, inftab As CINFTBL) As Integer '清除ID表
Public Declare Function hst_filesend Lib "hostcm32.dll" (ByVal pname As String, inftab As CINFTBL) As Integer '清除ID表
Public Declare Function hst_disconnect Lib "hostcm32.dll" (ByVal mode As Long, inftab As CINFTBL) As Integer '清除ID表
Public Declare Function hst_idtblgetid Lib "hostcm32.dll" (ByVal recno As Long, ByVal iddata As String) As Integer '轮寻 调用的代码 VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "Comdlg32.ocx"
Begin VB.Form frmmain
Caption = "调用动态库通讯"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 '窗口缺省
Begin VB.Frame Frame1
Caption = "选择使用的串口"
Height = 1455
Left = 2400
TabIndex = 3
Top = 120
Width = 2175
Begin VB.OptionButton Option1
Caption = "com1"
Height = 495
Left = 240
TabIndex = 5
Top = 360
Value = -1 'True
Width = 1815
End
Begin VB.OptionButton Option2
Caption = "com2"
Height = 495
Left = 240
TabIndex = 4
Top = 840
Width = 1815
End
End
Begin MSComDlg.CommonDialog CommonDialog1
Left = 2880
Top = 2040
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin VB.CommandButton Command3
Caption = "退出"
Height = 735
Left = 360
TabIndex = 2
Top = 2040
Width = 1815
End
Begin VB.CommandButton Command2
Caption = "接收文件"
Height = 735
Left = 360
TabIndex = 1
Top = 1080
Width = 1815
End
Begin VB.CommandButton Command1
Caption = "下传文件"
Height = 735
Left = 360
TabIndex = 0
Top = 120
Width = 1815
End
Begin VB.Label Label1
AutoSize = -1 'True
Height = 180
Left = 2520
TabIndex = 6
Top = 1800
Width = 90
End
End
Attribute VB_Name = "frmmain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Public Fname As String Private Sub Command1_Click()
Dim Port As Integer
Dim inftbl As CINFTBL
Dim lcp As INITTBL
Dim iddata As String
Dim ret As Integer
Dim time1 As Long
Dim i As Double
Dim pollret As Integer
Dim DataPath As String
If Option1.Value = True Then
Port = 0 '0表示com1口,1表示com2口
Else
Port = 1
End If
'以下参数为默认参数,请不要修改
inftbl.htid = "&&&&&&"
inftbl.jobcmd = 0
lcp.length = 0
lcp.ptout = 100
lcp.ctout = 1000
lcp.cretry = 99
lcp.stopkey1 = 2
lcp.stopkey2 = 0
lcp.speed = 4
lcp.parity = 0
lcp.sbit = 1
On Error GoTo ErrHandler
'设置过滤器。
CommonDialog1.CancelError = True
CommonDialog1.Filter = "all Files (*.*)|*.*" '指定缺省过滤器。
CommonDialog1.FilterIndex = 1 '显示“打开”对话框
CommonDialog1.InitDir = App.Path
CommonDialog1.ShowOpen '调用打开文件的过程。
Fname = CommonDialog1.FileName
If Dir(Fname) = "" Then
i = MsgBox(Fname & Chr(13) & "这个文件不存在", vbInformation vbOKOnly, "文件打开")
Exit Sub
End If
FileCopy Fname, App.Path & "\ware.txt"
DataPath = App.Path & "\ware.txt"
iddata = "&&&&&&"
ret = hst_idtblclr() '清除ID表
iddata = "&&&&&&"
ret = hst_idtbladd(iddata) '加入一个可通讯的手持机ID号,"&&&&&&"表示所有手持机
If ret <> 0 Then
MsgBox "严重错误:加入ID号错误!!!", 16, "上海鸣泽"
End
End If
ret = hst_open(Port, lcp) '打开通讯端口
If ret <> 0 Then
i = MsgBox("严重错误:打开通讯口错误,请重设通讯口或选择取消退出应用程序后关机重启动!!!", 17, "上海鸣泽")
If i = 2 Then
End
End If
Exit Sub
End If
time1 = Timer()
Do
pollret = hst_polling(1, 1) '轮寻端口
Loop Until Timer > time1 5 Or pollret > 0
If pollret > 0 Then '大于零表示轮寻到端口有数据发到
ret = hst_getcinffirst(inftbl) '取通讯信息头
If ret = 0 Then '取到信息
If inftbl.jobcmd = 1 Then 'inftbl.jobcmd=1 表示下传文件,inftbl.jobcmd=0 表示上传文件
' DataPath = "c:\data.txt" '指定下传的一个文件或一个目录
inftbl.fileno = 1 '指定下传的文件数,如上面的datapth为一个目录则为此目录下的所有文件数
inftbl.filesize = FileLen(DataPath) '指定的下传的文件大小,如上面的datapth为一个目录则为此目录下的所有文件的大小总和
frmmain.Label1.Caption = "卡西欧终端数据更新..."
ret = hst_filesend(DataPath, inftbl) '将指定的文件下传到手持机上,如上面的datapth为一个目录则为此目录下的所有文件下传到手持机中
If ret = 0 Then
MsgBox "卡西欧终端数据更新 成功!!!", 64, "上海鸣泽"
Else
MsgBox "卡西欧终端数据更新 错误!!!", 64, "上海鸣泽"
End If
frmmain.Label1.Caption = ""
End If
End If
Else
MsgBox "传输错误:请检查连线、通迅座和终端是否正常!!!", 16, "上海鸣泽"
End If
ret = hst_disconnect(1, inftbl) '关闭通讯连接
ret = hst_close() '关闭通讯端口
If ret <> 0 Then
MsgBox "严重错误:关闭通讯口 错误!!!", 16, "上海鸣泽"
End
End If
Exit Sub
ErrHandler:
'用户按“取消”按钮。
Exit Sub
End Sub Private Sub Command2_Click()
Dim Port As Long
Dim Path As String
Dim UploadPath As String
Dim inftbl As CINFTBL
Dim lcp As INITTBL
Dim ret As Integer
Dim iddata As String
Dim pollret As Integer
On Error Resume Next
If Option1.Value = True Then
Port = 0 '0表示com1口,1表示com2口
Else
Port = 1
End If
Path = App.Path & "\temp"
UploadPath = Path & "\" '指定接收上传文件的目录
If Dir(Path, vbDirectory) = "" Then
MkDir (Path) '自动生成上传文件目录
End If
'以下参数为默认参数,请不要修改
inftbl.htid = "&&&&&&"
inftbl.jobcmd = 0
lcp.length = 0
lcp.ptout = 100
lcp.ctout = 1000
lcp.cretry = 99
lcp.stopkey1 = 2
lcp.stopkey2 = 0 lcp.speed = 4
lcp.parity = 0
lcp.sbit = 1
iddata = "&&&&&&"
ret = hst_idtblclr() '清除ID表
iddata = "&&&&&&"
ret = hst_idtbladd(iddata) '加入一个可通讯的手持机ID号,"&&&&&&"表示所有手持机
If ret <> 0 Then
MsgBox "加入ID号错误", 16, "上海鸣泽"
Exit Sub
End If ret = hst_open(Port, lcp) '打开通讯端口
If ret <> 0 Then
MsgBox "打开通讯口错误!!", 16, "上海鸣泽"
Exit Sub
End If
pollret = hst_polling(1, 1) '轮寻端口,此处只轮寻一次,而在下传文件处的程序则
'可以在一个时间段内轮寻,可根据具体情况选择使用那一种
If pollret > 0 Then '大于零表示轮寻到端口有数据发到
ret = hst_getcinffirst(inftbl) '取通讯信息头
If ret = 0 Then '取到信息
If inftbl.jobcmd = 0 Then 'inftbl.jobcmd=1 表示下传文件;
'inftbl.jobcmd=0 表示上传文件
'可根据实际情况将上传或下传的程序合成到一块,由
'此值来判断是上传还是下传
frmmain.Label1.Caption = "卡西欧终端上传数据..."
ret = hst_filerecv(UploadPath, inftbl) '将手持机指定的文件上传到指定接收的一个目录
If ret = 0 Then
MsgBox "卡西欧终端上传数据 成功", 64, "上海鸣泽"
FileCopy UploadPath & "wareh.txt", Fname
Kill UploadPath & "wareh.txt"
End If
frmmain.Label1.Caption = ""
Else
MsgBox "卡西欧终端数据上传 错误", 16, "上海鸣泽"
End If
End If
Else
MsgBox "传输错误:请检查连线、通迅座和终端是否正常!!!", 16, "上海鸣泽"
End If
ret = hst_disconnect(1, inftbl) '关闭通讯连接
ret = hst_close() '关闭通讯端口
If ret <> 0 Then
MsgBox "关闭通讯口 错误", 16, "上海鸣泽"
End
End If End Sub Private Sub Command3_Click()
Unload Me
End Sub --*************--
蝸牛小混混
--*************--
------
鬱悶中......... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |