我不确定我要做的是什么,我有一个较旧的应用程序,我用来在com端口上运行硬件。我们刚刚引进了一种新设备,与旧设备完全相同。我正在尝试更新应用程序,以便它可以在任何一台设备上使用。我遇到的问题是新硬件上的com命令不同。
我想如何解决这个问题: 我的所有com函数都在一个模块中,我已经制作了第二个模块,其中包含所有相同名称的com函数,这些模块已经过定制以支持新机器。初始化和识别步骤是相同的,所以在表单加载时,我可以连接并询问我连接的机器。一旦我知道,我可以决定使用哪个模块,然后从那里开始。我的问题是,我试图实现它的方式不起作用,我开始怀疑它是否有可能。
(这种方法不起作用,但这里是我要做的一个例子)
dim Machine(1) as string
dim Number as integer
Number = 0
Machine(0) = Machine1
Machine(1) = Machine2
ComWrite ("*IDN?")
sleep(100)
Response = ComRead
if ComRead = A Then
Number = 0
Elseif ComRead = B Then
Number = 1
End if
Machine(Number).somecomfunction
第一个模块将命名为Machine1,第二个模块将命名为Machine2 显然这个方法会返回无效限定符的编译器错误,但我认为这可以让你知道我想要做什么。有没有办法做到这一点?
答案 0 :(得分:4)
您应该做的是定义一个接口,然后创建两个实现该接口的不同类。将模块中的所有现有函数转换为类而不是太难了。
这是一个例子。我创建了一个名为IMachine
的接口类和两个实现该接口的类:MachineA
和MachineB
。然后我创建了一个表单Form1
,其中包含两个单选按钮(用于选择哪台计算机)和一个用于调用Reset
方法的按钮。
显然你不应该在课堂上有MsgBox
个陈述,但这是一个快速的演示方式。此外,您将提供自己的代码,类似于您的问题,以确定要实例化的机器类。
IMachine.cls:
Option Explicit
Public Sub Reset()
End Sub
MachineA.cls:
Option Explicit
Implements IMachine
Private Sub IMachine_Reset()
MsgBox "RESET to MachineA"
End Sub
MachineB.cls:
Option Explicit
Implements IMachine
Private Sub IMachine_Reset()
MsgBox "*RST to MachineB"
End Sub
Form1.frm:
Option Explicit
Private Sub ResetButton_Click()
Dim m As IMachine
If optMachine(0).Value = True Then
Set m = New MachineA
Else
Set m = New MachineB
End If
Call m.Reset
End Sub
答案 1 :(得分:0)
您可以使用VB.NET获得更优雅的解决方案,但是当您使用VB6并且想要使用模块时,我认为最好的方法就是这样:
将所有常用例程放在一个模块ModuleCommon
中,将设备特定例程放在单独的模块Machine1
,Machine2
等中。
Public MachineType As Integer
Sub Main
Call CommonInit 'this method is in ModuleCommon
MachineType = FindType
If MachineType = 1 Then
Call Machine1Reset 'this method is in Module1
Else
Call Machine2Reset 'this method is in Module2
End If
End Sub
您唯一的另一个选择是使用变量作为参数调用单个函数,该函数告诉它要发送哪个命令:
Public MachineType As Integer
Sub Main
Call CommonInit 'this method is in ModuleCommon
MachineType = FindType
Call MachineReset(MachineType)
End Sub
然后在模块中:
Public Sub MachineReset(machineType as Integer)
If MachineType = 1 Then
'send "RESET"
Else
'send "RST"
End If
End Sub