什么';Windows Common Controls 6.0组件(MSCOMCTL.OCX)的正确来源是什么?

什么';Windows Common Controls 6.0组件(MSCOMCTL.OCX)的正确来源是什么?,com,vb6,activex,Com,Vb6,Activex,我正在尝试编写ActiveX控件,并注意到我似乎无法在Visual Basic(6.0)中创建ActiveX控件,该控件的功能稍微复杂一些。标签、按钮和复选框等简单控件似乎工作正常,但只要我尝试将树控件等添加到表单中,ActiveX控件就会在我将其嵌入另一台计算机上的某个主机应用程序时保持完全空白。不过,它在我的开发盒上运行良好 在浏览Projects->Components(Ctrl+T)列表时,我发现两个库显然包含一个树控件: Microsoft Windows通用控件5.0(SP2) M

我正在尝试编写ActiveX控件,并注意到我似乎无法在Visual Basic(6.0)中创建ActiveX控件,该控件的功能稍微复杂一些。标签、按钮和复选框等简单控件似乎工作正常,但只要我尝试将树控件等添加到表单中,ActiveX控件就会在我将其嵌入另一台计算机上的某个主机应用程序时保持完全空白。不过,它在我的开发盒上运行良好

在浏览Projects->Components(Ctrl+T)列表时,我发现两个库显然包含一个树控件:

  • Microsoft Windows通用控件5.0(SP2)
  • Microsoft Windows通用控件6.0(SP6)
一旦我将这些库中的任何控件添加到表单中,当嵌入到另一台计算机上时,表单将保持完全灰色。另一台计算机是Windows XP系统,因此我希望,考虑到Visual Basic 6有多旧,丢失可再发行文件不会成为问题。可以肯定的是,我安装了VB6可再发行文件,但不幸的是,这并没有带来什么不同

有人知道为什么我的ActiveX控件在其他计算机上会保持灰色,但在我的计算机上不会,只要我将上述库中的任何控件添加到我的表单中?FWIW我只需要一个树控件,所以如果有其他更合适的库可用,我也可以

更新:
事实证明,将MSCOMCTL.OCX下载到另一台计算机上的C:\WINDOWS\SYSTEM32,然后通过
regsvr32 C:\WINDOWS\SYSTEM32\MSCOMCTL.OCX
注册它是有帮助的。然而,我没有找到这个文件的官方来源,手工运行COM注册看起来很麻烦。是否真的没有我可以使用的可再发行版本?

VB6运行时已预装在XP及更高版本上,但您正在引用的通用控件组件没有

请尝试在客户端计算机上安装redistributable,或者为您的应用程序进行设置

编辑:


Opps,该链接用于更新,如果尚未安装OCX,则不安装OCX。我找到的唯一可再发行版本是for Windows Installer。

为了解决这个问题,我开发了一个.msi包。此处发布的源文件(WiX)和桩号:

啊,真有趣!实际上,将“mscomctl.ocx”下载到XP机器并将其存储在C:\WINDOWS\SYSTEM32中会有所帮助。然后,我需要注册服务器(通过运行'regsvr32 C:\WINDOWS\SYSTEM32\MSCOMCTL.OCX'),这使得一切正常。但这相当麻烦,真的没有更简单的方法吗-/如果将OCX放在运行EXE的文件夹中,VB运行时将尝试自动注册它(不需要regsvr32)。另一种选择是使用Make My Manifest()免费注册COM,如果您不想进行全面的设置。不要将常用OCX放入应用程序文件夹,并允许它们在VB6程序调用它们时自行注册。这就是地狱之源。为您的应用程序创建一个适当的安装程序,该安装程序执行版本检查,并按照预期在注册表中维护使用计数。或者使用MMM,但如果您使用MMM,您将负责在发布新版本时为依赖项提供服务(主要是出于安全原因)。+1到Bob R的“创建正确的安装程序…”不这样做将导致我看到的COM错误429(ActiveX组件无法运行)问题的80%(统计数据当场生成)t创建对象)和430(类不支持自动化或不支持预期接口)。我看到其中一个,然后问开发人员,“你创建了安装程序包吗?”答案(80%的时间)是“不,我们认为我们不需要它。这只是对主exe的一个小改动。”此时,适当的回答是“好吧,你买了DLL地狱的票。你为什么要我去旅行?”MSDN链接不是针对2005版的吗?自那时以来,已经有许多安全修复。最好获得包含最新MSCOMCTL.ocx的新版本。早期的通用控件5.0(comctl32.ocx)比通用控件6.0(MSCOMCTL.ocx)与XP/Vista具有更好的兼容性。我建议用它instead@rpetrich:哦,真的吗?这是你的直觉,还是你有一些文件来支持?如果这是真的,我真的会选择CC 5.0。