我正在使用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位。
答案 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),然后从中断继续查看为什么控件不是'初始化。