Com VB6错误-无法加载.ocx文件

Com VB6错误-无法加载.ocx文件,com,vb6,registry,ocx,Com,Vb6,Registry,Ocx,今天大部分时间我都在尝试将OCX文件加载到我的一个VB6项目中。我已经尽我所知在注册表中检查COM注册,并且多次尝试在文件上使用REGSVR32,但都没有效果。当我尝试加载组件(在Project-->Components下)时,从VB6得到的所有信息都是无法加载“FilePath\FileName.ocx”。其他人以前见过这个问题吗?如果是的话,有什么办法解决它吗?只是一些帮助隔离问题的提示 使用OleView查看控件 检查名称:如果它是保留字之一,如“菜单”,vb6将无法加载它。(尽管vb6很

今天大部分时间我都在尝试将OCX文件加载到我的一个VB6项目中。我已经尽我所知在注册表中检查COM注册,并且多次尝试在文件上使用REGSVR32,但都没有效果。当我尝试加载组件(在Project-->Components下)时,从VB6得到的所有信息都是无法加载“FilePath\FileName.ocx”。其他人以前见过这个问题吗?如果是的话,有什么办法解决它吗?

只是一些帮助隔离问题的提示

使用OleView查看控件

检查名称:如果它是保留字之一,如“菜单”,vb6将无法加载它。(尽管vb6很乐意让您创建(并使用)一个名称不好的文件,直到保存并重新加载为止)

检查接口:它是否描述了功能?您的ocx可能已损坏或未经许可

尝试使用ActiveX控件测试容器加载它。。。
如果可以,问题出在VB6上,而不是ocx。

当您说您在文件上使用了“REGSVR32无效”时,您的意思是收到文件名成功消息还是错误消息?如果注册文件成功,CMB关于ocx未经许可的说法可能是正确的。

除了许可之外,还有几个vb6的其他触发点尤其是如果OCX是在VB6中开发的

如果是这样,“正式”系统注册版本可能与您正在使用的特定ocx冲突。换句话说,它们可能具有相同的专有名称(或classid),但您尝试使用的名称可能无法实现系统注册名称中描述的所有功能(即,您的版本较不成熟)。当作者希望在增强控件功能的同时保持二进制兼容性时,就会出现这种情况。只要公共接口保持兼容,vb就不会重新计算classid

您可以通过强制注销特定控件(实际上注销该控件的所有实例)来修复此问题。(regsvr32/u control.ocx)然后重新注册要使用的。执行此操作时,请确保不存在正在运行的VB6实例,否则结果可能不起作用。(检查您的任务列表)


希望有帮助…

该控件可能依赖于另一个可能丢失或未注册的DLL或OCX,这可能表现为VB报告您尝试使用的控件丢失。但是,我不确定如何识别依赖项。据我所知,dependency walker识别静态依赖关系;我不确定它是否能够识别COM依赖项。

这可能是一个依赖项问题——OCX需要的其他组件不存在。Dependency Walker将查找任何静态依赖项。

我们最近修复了类似错误。在本例中,错误出现在Visual Basic项目(.vbp)文件中。项目文件在标准化构建机器之外进行了编辑,包含对OCX组件的引用,包括特定于工作站的路径和组件版本

您可以在文本编辑器中编辑项目文件,也可以从版本控制获取工作版本。

取消注册Ocx 重新注册ocx 然后在VB6中再次加载该项目,它对我有效


谢谢大家

取消注册和再次注册对我也有帮助。
请注意,您需要使用以下语法注册此组件:

regsvr32 /i:design olch2x8.ocx

在OleView中,使用OCX上的文件->查看类型库,并注意importlib行。例如importlib(“oleguids3.tlb”);意味着在引用OCX之前,需要在开发人员机器上注册此tlb。原因是,如果一个库被OCX的[external]接口引用,那么它应该在开发机器上注册,或者OCX在IDE中不可用。果然,这是一个依赖性问题。我已经有一段时间没有和这个人吵架了,完全忘了我问过这件事。