4

今天大部分时间我都在尝试将 OCX 文件加载到我的一个 VB6 项目中。我已尝试尽我所知检查注册表中的 COM 注册,并尝试多次在文件上使用 REGSVR32 均无济于事。当我尝试加载组件(在项目下 --> 组件下)时,我一直从 VB6 得到的只是无法加载“FilePath\FileName.ocx”。以前有没有其他人见过这个,如果是这样,有什么想法可以解决它吗?

4

8 回答 8

4

只是一些提示可以帮助隔离问题....

用 OleView 看控件

检查名称:如果是'Menu'等保留字之一,vb6将无法加载它。(尽管 vb6 很乐意让您创建(和使用)一个名字不好的名字,直到它被保存并重新加载)

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

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

于 2009-07-13T18:57:18.263 回答
3

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

于 2009-07-13T22:24:05.303 回答
2

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

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

于 2012-12-01T09:19:11.697 回答
1

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

regsvr32 /i:design olch2x8.ocx
于 2015-04-26T01:26:18.497 回答
0

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

于 2009-07-13T20:55:33.953 回答
0

撇开许可不谈,vb6 还有几个其他的转折点。 特别是如果 OCX 是在 VB6 中开发的。

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

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

希望有帮助...

于 2009-07-13T22:07:29.550 回答
0

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

于 2009-07-13T22:23:12.433 回答
0

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

谢谢大家

于 2013-12-24T10:17:39.990 回答