如何在VB6中声明OCX控件但不包含在窗体中

如何在VB6中声明OCX控件但不包含在窗体中,vb6,activex,ocx,Vb6,Activex,Ocx,我正在尝试在VB6活动X EXE中创建OCX控件的第二个实例。OCX控件的第一个实例包含在ActiveX EXE的表单中,并且在表单中可见。我正在尝试创建第二个实例作为ActiveX EXE类的成员。此实例将不包含在表单中,并且在屏幕上不可见。我已经能够声明实例,但是我找不到使用新操作符初始化它的正确语法 ActiveX VB6模块内的声明 Private m_ZoomSigPlus2 As SIGPLUSLib.sigPlus ActiveX_Initialize()函数中的初始化 编译

我正在尝试在VB6活动X EXE中创建OCX控件的第二个实例。OCX控件的第一个实例包含在ActiveX EXE的表单中,并且在表单中可见。我正在尝试创建第二个实例作为ActiveX EXE类的成员。此实例将不包含在表单中,并且在屏幕上不可见。我已经能够声明实例,但是我找不到使用新操作符初始化它的正确语法

ActiveX VB6模块内的声明

 Private m_ZoomSigPlus2 As SIGPLUSLib.sigPlus 
ActiveX_Initialize()函数中的初始化

编译错误:新关键字的使用无效

我试着研究作为表单一部分的实例是如何初始化的,但是当控件包含在表单中时,似乎没有显式的New操作。表格中的声明如下:

   Begin SIGPLUSLib.SigPlus SigPlus1 
      Height          =   2415
      Left            =   0
      TabIndex        =   4
      Top             =   0
      Width           =   5055
   End

创建与表单无关的OCX控件实例的正确方法似乎是使用CreateObject函数

Private m_ZoomSigPlus2 As Object

64  Set m_ZoomSigPlus2 = CreateObject("SIGPLUS.SigPlusCtrl.1")
66  m_ZoomSigPlus2.InitSigPlus

有人问我为什么需要这样做。OCX控件与一些捕获传入数据的外部硬件配合使用。OCX还有一些处理传入数据集的方法。但是,当处理完成时,需要关闭传入的数据采集。通过创建第二个实例,我应该能够在捕获当前需要的传入数据期间处理数据集。有人可能会说,OCX的另一种更具凝聚力的设计可能已经消除了创建第二个实例的需要,但目前还没有对OCX进行重新设计。

我怀疑您有XY问题,您已经将问题分为容易的部分和不可能的部分,并且在不可能的部分寻求帮助。OCX控件以一种形式存在,这就是它们所做的事情和它们存在的目的。创建一个的方法是将它放在表单上。你到底想完成什么?你能在表单上添加第二个控件而不是在代码中实例化一个吗?你为什么要用这种方式去做?谢谢,在表单中添加第二个控件时,只需将visible属性设置为False,用户将看不到它。如果您需要动态添加此控件的多个实例,则将其设置为控件数组,您可以动态添加其他数组元素实例。@MarkL是的,我想到了此解决方案,如果我不知道如何在窗体外部创建它,这是我的下一个选择。然而,我发现了如何创建外部形式。见我贴出的答案
Private m_ZoomSigPlus2 As Object

64  Set m_ZoomSigPlus2 = CreateObject("SIGPLUS.SigPlusCtrl.1")
66  m_ZoomSigPlus2.InitSigPlus