我可以在VB6中使用相同的库作为组件和引用吗?

时间:2012-02-13 13:51:28

标签: vb6

我想使用Winsock Comm控件。有些表单使用它作为表单(组件)的控件,但我也有一些类有引用并创建了一个新的MSComm对象。

这似乎与VB6失败了。您可以将其添加为组件或引用。有没有办法在同一个项目中同时做两件事?

4 个答案:

答案 0 :(得分:3)

您可以使用mktyplib.exe编译自定义“直接控件”类型库,如下所示

[
  uuid(<<GUID_HERE>>),
  version(1.0),
  helpstring("Direct Controls Typelib 1.0")
]
library DirectControls10
{
    importlib("C:\\WINDOWS\\system32\\mscomm32.ocx");

    typedef [public] MSCommlib.MSComm DirectMSComm;
}

在项目中引用DirectControls10后,您可以像DirectMSComm一样使用MSCommlib.MSComm coclass这样的用户控件

Private WithEvents m_oComm      As DirectMSComm

Private Sub Form_Load()
    Set m_oComm = New DirectMSComm
    Set m_oComm = CreateObject("MSCommlib.MSComm")
    Set m_oComm = MSComm1.Object
End Sub

Private Sub m_oComm_OnComm()
    Debug.Print "m_oComm_OnComm"; Timer
End Sub

... MSComm1上面的示例中Form1上的“通信控件”。

必须将此自定义.tlb文件分发给您的客户。仅在您的开发机器上使用它。

答案 1 :(得分:1)

我认为组件引用是一种特殊的引用。因此,一旦引用了组件,就可以将其作为引用库进行访问。

答案 2 :(得分:1)

您在谈论Winsock MSComm吗?

如果是后者,请从表单中删除组件,然后将其作为工具箱中的组件删除。

将其添加为引用,并在以前有组件的表单中手动声明实例;

private withevents comm as MSComm

_load

中创建它们
set comm = new MSComm
只要变量名称相同,

就可以连接所有事件。

如果它是一个Winsock组件,那么最简单的方法是使用OCX组件&amp;必要时将表单中的引用传递给类,因为您无法可靠地早期绑定winsock组件; set wsck1 = new winsock将编译&amp;运行正常,但在没有安装VB6的任何机器上,它将失败,因为winsock组件每次以这种方式创建一个许可证验证。

我90%肯定这不是mscomm的情况,但无论如何最好进行测试。

答案 3 :(得分:-2)

UserControl无论如何都是Class的一种特殊形式,因此要包装控件,您需要创建一个UserControl。您可以通过明确命名的InvisibleAtRuntime属性轻松地在运行时使非UI UserControl不可见。