2009-07-13 133 views
4

我一直试图加载一个OCX文件到我今天大部分时间的VB6项目之一。我已经尝试在注册表中检查COM注册表中最好的,我知道如何,并试图在文件上使用REGSVR32多次无济于事。当我尝试加载组件(在项目 - >组件中)是'FilePath \ FileName.ocx'无法加载时,我从VB6获得的所有内容。有没有其他人看过这个,如果是的话,任何想法如何解决它?VB6错误 - 无法加载.ocx文件

回答

2

这可能是一个依赖性问题 - OCX所需的一些其他组件不存在。 Dependency Walker会发现任何静态依赖关系。

+0

果然,这竟然是一个依赖性问题。我肯定已经有一段时间了,我完全忘记了我曾经问过这个问题。 – 2010-08-20 20:47:22

3

只是一对夫妇的提示,以帮助查出问题....

来看看有OLEVIEW

检查名称的控制:如果是保留字,如“菜单”之一, vb6将无法加载它。 (虽然vb6会很乐意让你创建(并使用)一个坏名字,直到它被保存并重新加载)

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

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

+0

在OLEVIEW使用文件 - >查看类型库在OCX,并注意导入库线。例如importlib(“oleguids3.tlb”);意味着在引用OCX之前需要在开发机器上注册此tlb。原因是如果一个库被OCX的[external]接口引用,那么它应该在开发机器上注册,或者OCX在IDE中不可用。 – wqw 2009-07-14 11:26:26

0

当你说你已经使用“REGSVR32上的文件无果”你的意思是你得到一个文件名成功的消息,或者是一条错误信息?如果注册文件成功CMB可能是正确的关于ocx未经许可。

0

除了许可外,还有一些vb6的其他旅程点。 尤其是如果OCX是在VB6中开发的。

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

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

希望帮助...

0

的控制可能是在另一个DLL或OCX,可能会丢失或没有注册的依赖,这可能表现为VB报告,该控制你正在尝试使用缺少。但是,我不确定你将如何识别依赖关系。据我所知,依赖walker识别静态依赖;我不确定它是否可以识别COM依赖关系。

2

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

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

0

Un注册Ocx 重新注册ocx 然后再次在VB6中加载项目,它为我工作。

谢谢大家

0

取消注册和注册再次为我工作。
请注意,您需要注册使用此语法这个组件:

regsvr32 /i:design olch2x8.ocx