1. 程式人生 > >VB-創建類模塊DLL文件

VB-創建類模塊DLL文件

完成 文件路徑 ngs 調用 abap ive binary splay 初始化

最近需要調用MSCOMM32.OCX控件,但是ABAP調用過程中發現無法同時發送多條記錄,則需調整實現方式:

  a.創建DLL文件封裝MSCOMM控件相關屬性及方法

  b.系統註冊DLL文件

  c.ABAP調用DLL文件相關屬性及方法

這一部分內容主要是將VB類模塊的創建過程記錄下:

1.打開VB,創建ActiveX DLL文件

 技術分享圖片

2.修改工程名為MSCommPrj

 技術分享圖片

3.修改類模塊名稱為msCommCls

 技術分享圖片

4.引用MSCOMM32.OCX組件

 菜單:工程->引用->瀏覽

 技術分享圖片

 查找MSCOMM32.OCX文件(C:\Windows\System32 或者 C:\Windows\SysWOW64)

 技術分享圖片

 技術分享圖片

 控件引用完成

5.類模塊創建Function

技術分享圖片
********************************串口通信集成1.初始參數2.打開串口3.關閉串口4.發送數據5.接收數據*********************************

類定義
Dim msComm As New MSCommLib.msComm
聲明
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

初始參數
Public
Function frm_initial_parameters(ByVal commport As Integer, ByVal setting As String, ByVal inputmode As Integer) As String On Error GoTo Err 串口 msComm.commport = commport 參數:波特率 校驗 數據位 停止位 msComm.Settings = setting 設置接收數據類型:二進制comInputModeBinary-0 字符串comInputModeText-1
msComm.inputmode = inputmode 一次從接收緩沖區讀取所有數據(8字節一組) msComm.InputLen = 0 接收緩沖區大小 msComm.InBufferSize = 1024 發送緩沖區大小 msComm.OutBufferSize = 1024 一次發送所有數據,發送數據時不產生onComm()事件 msComm.SThreshold = 0 接收1個字節長度觸發OnComm()事件 msComm.RThreshold = 1 清空接收緩沖區 msComm.InBufferCount = 0 清空發送緩沖區 msComm.OutBufferCount = 0 返回執行成功標識 frm_initial_parameters = "S@串口初始化成功" Err: If Err.Number > 0 Then 返回錯誤消息 frm_initial_parameters = "E@" + "錯誤編號:" & Err.Number & " 錯誤描述:" & Err.Description Exit Function Resume Next End If End Function 打開串口 Public Function frm_open_serialport() As String On Error GoTo Err 串口打開 msComm.PortOpen = True 返回執行成功標識 frm_open_serialport = "S@串口打開成功" Err: If Err.Number > 0 Then frm_open_serialport = "E@" + "錯誤編號:" & Err.Number & " 錯誤描述:" & Err.Description Exit Function Resume Next End If End Function 關閉串口 Public Function frm_close_serialport() As String On Error GoTo Err 清空接收緩沖區 msComm.InBufferCount = 0 清空發送緩沖區 msComm.OutBufferCount = 0 串口關閉 msComm.PortOpen = False 返回執行成功標識 frm_close_serialport = "S@串口關閉成功" Err: If Err.Number > 0 Then frm_close_serialport = "E@" + "錯誤編號:" & Err.Number & " 錯誤描述:" & Err.Description Exit Function Resume Next End If End Function 發送數據 Public Function frm_send_data(ByVal inputmode As Integer, ByVal inputtime As Integer, ByVal inputdata As String) As String Dim rst As String On Error GoTo Err 發送數據檢查 If inputdata = "" Then Err.Number = 10 Err.Description = "發送數據為空" GoTo Err End If 數據類型 0-16進制 1-字符串 If inputmode = 0 Then Dim ztm As Integer Dim spt() As String Dim slz() As String Dim byt() As Byte 根據符號 & 拆解字符串 spt = Split(inputdata, "&") 發送數據條目數 ztm = UBound(spt) 循環條目分批發送數據 For i = 0 To ztm 字符串前後空格 spt(i) = LTrim(spt(i)) spt(i) = RTrim(spt(i)) 16進制按照空格拆解為Byte[]數組 slz = Split(spt(i), " ") 重定義數組大小Byte[] ReDim byt(UBound(slz)) For j = 0 To UBound(slz) byt(j) = Val("&H" & slz(j)) Next j 發送數據 msComm.Output = byt Sleep (inputtime) Erase byt Erase slz Next i ElseIf iniputmode = 1 Then msComm.Output = inputdata Sleep (inputtime) End If 返回執行成功標識 frm_send_data = "S@數據發送成功" Err: If Err.Number > 0 Then frm_send_data = "E@" + "錯誤編號:" & Err.Number & " 錯誤描述:" & Err.Description Exit Function Resume Next End If End Function 接收數據 Public Function frm_receive_data(ByVal inputmode As Integer) As String On Error GoTo Err Dim strRest As String Dim strBuff As String Dim strdata As String Dim str() As Byte If (inputmode = 0) Then 16進制數據接收 Select Case msComm.CommEvent Case comEvReceive 接收16進制數據 strBuff = msComm.Input str() = strBuff For k = 0 To UBound(str) If Len(Hex(str(k))) = 1 Then strdata = strdata & "0" & Hex(str(k)) Else strdata = strdata & Hex(str(k)) End If Next End Select If rst = "" Then strRest = strdata Else strRest = strRest & " " & strdata End If ElseIf (inputmode = 1) Then 文本數據接收 strRest = msComm.Input End If If (strRest = "") Then Err.Number = 11 Err.Description = "接收數據為空值" GoTo Err End If 返回執行成功標識 frm_receive_data = "S@" & strRest Err: If Err.Number > 0 Then frm_receive_data = "E@" + "錯誤編號:" & Err.Number & " 錯誤描述:" & Err.Description Exit Function Resume Next End If End Function
View Code

6.工程保存並編譯成DLL文件

 文件保存   菜單:文件->保存工程

 文件編譯   菜單:文件->生成MSCommPrj.dll

7.DLL類測試

 註冊DLL文件:運行CMD->Regsvr32 DLL文件路徑

 打開VB,創建標準EXE

 技術分享圖片

 窗體元素布局

 技術分享圖片

 調用DLL類方法

Dim mscls As New MSCommProject.MSCommCls
Dim rst As String

Private Sub close_Click()
    關閉串口
    rst = mscls.frm_close_serialport
    RText.Text = rst + vbCrLf + RText.Text
End Sub

Private Sub Form_Load()
    初始參數
    rst = mscls.frm_initial_parameters(commport.Text, setting.Text, inputmode.Text)
    RText.Text = rst + vbCrLf + RText.Text
    
End Sub

Private Sub open_Click()
    打開串口
    rst = mscls.frm_open_serialport
    RText.Text = rst + vbCrLf + RText.Text
End Sub

Private Sub send_Click()
    發送數據
    rst = mscls.frm_send_data(inputmode.Text, SText.Text)
    RText.Text = rst + vbCrLf + RText.Text
End Sub

 

VB-創建類模塊DLL文件