VB调用COM
小弟是学VC的,最近用到VB调用VC写的COM组件,继承COM组件的接口(interface)CAA,并调用里面的函数BB。
因为我对VB语法的 不熟悉,所以实现起来就特别麻烦,希望各位VB达人能指教下,给出源码更加感激不尽,THANK U。
[解决办法]
看看这本书,上面有对COM的详细介绍:
http://download.csdn.net/source/1371398
[解决办法]
声明创建对象,然后使用其方法属性等。
[解决办法]
'先定义Dim xCom as YourComObject'调用BBxCom.BB para1,para2,...
[解决办法]
提供一个vb的大概
Private Recievedata As StringPrivate Sub Form_Load() Comm1.Settings = "2400,N,8,1" '设置通信口参数 Comm1.InBufferSize = 190 '设置Comm1接收缓冲区为19字节 Comm1.OutBufferSize = 2 '设置Comm1发送缓冲区为2字节 Comm1.InputMode = comInputModeBinary '设置接收数据模式为二进制形式 Comm1.InBufferCount = 0 '清除接收缓冲区 Comm1.OutBufferCount = 0 '清除发送缓冲区 Comm1.CommPort = 1 Comm1.InputLen = 190 '设置由串型端口读入的字符长度 Comm1.PortOpen = True '打开通信口 Comm1.RThreshold = 19 '设置接收19个字节产生OnComm事件 End SubPrivate Sub InquireScale_Click() Dim txtSum1 As String txtSum1 = "SR" & vbLf If Comm1.PortOpen = False Then Comm1.PortOpen = True End If Comm1.Output = txtSum1 'Debug.Print Comm1.OutBufferCount 'Debug.Print Comm1.InBufferCount Comm1.OutBufferCount = 0 '清除发送缓冲区 Comm1.InBufferCount = 0 '清除接收缓冲区End SubPrivate Sub ZeroScale_Click() Dim txtSum As String txtSum = "ZI" & vbLf 'Debug.Print TypeName(txtSum) If Comm1.PortOpen = False Then Comm1.PortOpen = True End If Comm1.Output = txtSum 'Debug.Print Comm1.OutBufferCount Comm1.OutBufferCount = 0 '清除发送缓冲区 Comm1.InBufferCount = 0 '清除接收缓冲区End SubPrivate Sub Comm1_OnComm() On Error Resume Next Dim BytesReceived() As Byte Dim buffer As String Dim HData As String Dim i As Integer Select Case Comm1.CommEvent Case comEvReceive '接收十六进制数据。并以十六进制显示 buffer = Comm1.Input '接收数据至字符串中 BytesReceived() = buffer '将数据转入Byte数组中 Debug.Print buffer For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示 If Len(Hex(BytesReceived(i))) = 1 Then HData = HData & "0" & Hex(BytesReceived(i)) Else HData = HData & Hex(BytesReceived(i)) End If Recievedata = HData '最后将结果后入Recievedata中 Comm1.OutBufferCount = 0 '清除发送缓冲区 Comm1.InBufferCount = 0 '清除接收缓冲区 Comm1.PortOpen = False Next Debug.Print Recievedata '返回的19位字符串 End Select Call Calculatescale End SubPublic Sub Calculatescale() Dim a, b, c, d, f As Integer a = Mid(Recievedata, 18, 1) b = Mid(Recievedata, 22, 1) c = Mid(Recievedata, 24, 1) d = Mid(Recievedata, 26, 1) e = Mid(Recievedata, 28, 1) If Mid(Recievedata, 15, 2) = "A0" Then TxtResult.Text = (a * 1000 + b * 100 + c * 10 + d * 1 + e * 0.1) / 1000 TxtResult.Text = Format(TxtResult.Text, "0.0000") Else: TxtResult.Text = -(a * 1000 + b * 100 + c * 10 + d * 1 + e * 0.1) / 1000 TxtResult.Text = Format(TxtResult.Text, "0.0000") End If 'Debug.Print TxtResult.Text '查询的重量 单位kgEnd Sub
[解决办法]
Implements 语句
指定要在包含该语句的类模块中实现的接口或类。
语法
Implements [InterfaceName | Class]
所需的 InterfaceName 或 Class 是类型库中的接口或类的名称,该类型库中的方法将用与 Visual Basic 类中相一致的方法来实现。
说明
所谓接口就是代表接口封装的成员(方法以及属性)的原型集合;也就是说,它只包含成员过程的声明部分。一个类提供一个或多个接口的所有方法以及属性的一种实现方案。类的控制者每次调用函数时,该函数所执行的代码由类来提供。每个类至少应实现一个缺省接口。在 Visual Basic 中,一个已实现的接口中任何没有显式声明的成员都是缺省接口的隐式成员。
当 Visual Basic 类实现接口时,都会提供该接口的类型库中说明的所有 Public 过程的版本。除了提供接口原型与自编过程之间的映射关系之外,Implements 语句还使这个类接收对指定接口 ID 的 COM QueryInterface 调用。
注意 Visual Basic 不能实现派生出来的类或接口。
在实现接口或类时,必须包括所用到的 Public 过程。如果在实现接口或类时遗漏了成员,就会产生错误。如果正在实现的类中某个过程还没有代码,则可以产生一个适当的错误信息 (Const E_NOTIMPL = &H80004001),以便用户意识到该成员还没有实现。
Implements 语句不能在标准模块中使用。