• abap调vb写的dll实现电子天平的读数(带控件版)


    废话不多说,直接上。

    鉴于abap调研的dll文件需要在wins注册,自己尝试过delphi和C#感觉不是很好,最后毅然选择了VB来写

    因为需要用到MScomm控件,所以对于将要写的dll需要带form的,貌似这样才能将控件加到dll中来。

    步骤:

    1,新建dll程序,添加一个窗体

    2,在from_load中初始化com口参数

    1
    2
    3
    4
    5
    6
    7
    8
    With MSComm1
            .CommPort = 1  '设置Com1为通信端口
            .Settings = "1200,n,7,1"  '设置通信端口参数 9600赫兹、偶校验、7个数据位、1个停止位.(这里需要进一步说明的是:.Setting=”BBBB,P,D,S”。
            .InBufferSize = 16  '设置缓冲区接收数据为40字
            .InputLen = 1  '设置Input一次从接收缓冲读取字节数为1
            .RThreshold = 1  '设置接收一个字节就产生OnComm事件
            .PortOpen = True
     End With

    3,写对应的端口数据接受(因为之前用端口测试工具测试过传出的数据流,所以下面代码只是针对特定数据流的截取)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    On Error Resume Next
    If MSComm1.CommEvent = comEvReceive Then
      If MSComm1.InBufferCount > 0 Then
       Rx_buff = MSComm1.Input
       If Rx_buff = "N" Then start = "S"
       Constop = False
       For i = 0 To UBound(Rx_buff)
       If start = "S" Then
       send = send & Rx_buff
       If Len(send) > 17 Then
       Text1.Text = CDbl(Mid(send, 8, 10))
       start = "E"
       MSComm1.PortOpen = False
       End If
       End If
       Next i
      End If
    End If

     4,在dll的class1中写函数啦

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function show()
    Form1.str = "s"
    Form1.Caption = "连接状态"
    Form1.show vbModal
    End Function
     
    Public Function sget() As String
    sget = Form1.str & Form1.send
    End Function

    先调出窗口,再获取端口值

    因为能力有限,在测试的时候无法将窗口隐藏而不影响到form_load的执行,所以,才有这个必须出现的窗口

    好了,至此,一个带from的调用Mscomm控件的dll文件就写好了,

    5,将dll文件保存到system32/syswow64下

    运行cmd注册dll文件

    6,abap调用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    REPORT ZLYTEST_DLLTEST001.
    include ole2incl.
    data win32 type ole2_object.
    DATA SUM TYPE I.
    data label type string.
    create object win32 'lytest10.class1'.
    *create object win32 'TESTDLL'.
    call METHOD of win32 'show'.
    call method of win32 'sget' = label.
     
     
    *0 Successful processing of the method meth.
    *1 Communication Error to SAP GUI.
    *2 Error when calling method meth.
    *3 Error when setting a property.
    *4 Error when reading a property.
    *
     
     
    write label.

      至此,就将数据带回abap来了,然后怎么操作这个数,就看需求啦

  • 相关阅读:
    给RArray和CArray加上自己的泛型算法(转)
    由电话号码得到姓名(转)
    在Eclipse中用TODO标签管理任务(转)
    Symbian_C++:Multipart/formdata(转)
    Symbian源代码还原之一,二,三,四,五(转)
    使用Carbide C++进行ODD(On Device Debugging)(转)
    S60_Platform_and_device_identification_codes(转)
    S60 3rd中怎么设置字体类型与字体大小!!!!!(转)
    诺基亚10.22变革影响的分析(转)
    MeeGo软件架构综述(转)
  • 原文地址:https://www.cnblogs.com/sapSB/p/3660050.html
Copyright © 2020-2023  润新知