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

时间:2009-07-13 18:47:25

标签: com vb6 registry ocx

我今天大部分时间都在尝试将OCX文件加载到我的一个VB6项目中。我已经尝试在注册表中检查COM注册我知道的最好,并尝试多次使用REGSVR32在文件上无济于事。当我尝试加载组件(在Project - > Components下)时,我不断从VB6获取的是“FilePath \ FileName.ocx”无法加载。有没有其他人见过这个,如果有的话,任何想法如何解决它?

8 个答案:

答案 0 :(得分:3)

只是帮助隔离问题的几个提示....

使用OleView查看控件

检查名称:如果它是其中一个保留字,例如'Menu',则vb6将无法加载它。 (虽然vb6很乐意让你创建(并使用)一个名字不好的名字,直到它被保存并重新加载)

检查界面:它是否描述了功能?您可能有受损或未经许可的ocx。

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

答案 1 :(得分:2)

这可能是依赖性问题 - OCX所需的其他一些组件不存在。 Dependency Walker将找到任何静态依赖项。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

当您说您在文件上使用“REGSVR32无效”时,您是否意味着您收到文件名成功消息或错误消息?如果注册文件成功,CMB很可能是关于ocx未经许可的。

答案 4 :(得分:0)

除了许可之外,还有其他几个与vb6的旅行点。 特别是如果OCX是在VB6中开发的。

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

您可以通过强制取消注册特定控件来解决此问题(实际上取消注册控件的所有实例)。 (regsvr32 / u control.ocx)然后重新注册您打算使用的那个。确保在执行此操作时不存在正在运行的VB6实例,否则结果可能不起作用。 (检查你的任务清单)

希望有帮助...

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

谢谢大家

答案 7 :(得分:0)

取消注册和注册也为我工作了。
请注意,您需要使用以下语法注册此组件:

regsvr32 /i:design olch2x8.ocx