我想使用Winsock Comm控件。有些表单使用它作为表单(组件)的控件,但我也有一些类有引用并创建了一个新的MSComm对象。
这似乎与VB6失败了。您可以将其添加为组件或引用。有没有办法在同一个项目中同时做两件事?
答案 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不可见。