无法在Windows 7错误372中加载VB6 OCX

时间:2011-10-19 05:04:37

标签: windows-7 com vb6 registry ocx

我正在使用VB6开发针对Windows XP SP3开发的应用程序。我目前正在使其在Windows 7上运行,但我遇到了一个自定义OCX文件的问题。

尝试加载包含问题OCX中包含的控件实例的表单时,会产生以下错误:

  

无法从y.ocx加载控件'x'。您的y.ocx版本可能已过时。确保您使用的是随应用程序提供的控件版本。

我检查了版本号,它们都是正确的并引用了正确的版本。 OCX注册正常,所有预期的注册表项都存在。

使用DependencyWalker进行检查显示没有遗漏的依赖项。

该软件在XP下运行良好,这似乎是(貌似)在Windows 7上运行时的唯一问题。

有趣的是,如果我使用VB6组(使用组中的违规OCX部分和启动项目的应用程序)运行VB6 IDE,我就没有问题。通过IDE自行运行应用程序仍然会出现错误。

关于可能导致应用程序抛出此错误的遗漏的任何想法?

Windows 7 Professional和Home Professional都出错,均为32位。

3 个答案:

答案 0 :(得分:4)

这几乎可以肯定是接口兼容性问题。 COM接口的版本与主要/次要/修订版号完全分开,除了安装程序使用之外,它们只是注释。

在某些地方,您破坏了二进制兼容性,并且您尝试使用比编译应用程序更新的接口部署库。

这些版本号可在以下密钥中找到:

HKEY_CLASSES_ROOT\CLSID\{class Id GUID}\VERSION

你的程序需要删除它的旧引用,新的一套,然后必须重新编译。这也意味着删除控件的任何实例并逐个添加它们。

我怀疑这是Windows 7问题。

答案 1 :(得分:0)

我怀疑这是UAC问题。试试turning UAC off,看看是否能解决眼前问题。如果是,那么您必须使用“run as administrator”和/或create a manifest为您的应用程序注册所有内容。

答案 2 :(得分:0)

您的OCX中包含的控件听起来有加载问题,而不是一般注册错误。查看x控件的构造函数,看看他们是否正在做任何不同于UAC的事情。你可以调试它的一种方法是在初始化控件之前放置一些中断,并从Visual Studio调试应用程序(记得在VB6中创建PDB),然后从中断继续查看为什么控件不是'初始化。