我继承了一个使用Thorlab activex控件的visual studio 6项目。 该项目曾在几年前在Windows XP上运行,我已经设法导入它并在VS2012中构建它。 问题是,当我尝试运行exe文件时,我得到了一个:
"Debug Assertion Failed", file occcont.cpp line 925.
看看VS输出我看到了:
"CoCreateInstance of OLE control {3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3} failed.
>>> Result code: 0x80040154
>>> Is the control is properly registered?"
阅读其他相关帖子,错误似乎表明控件未注册并查看寄存器我发现{3CE35BF3-1E13-4D2C-8C0B-DEF6314420B3}与Thorlabs MG17电机控件完全对应。
我曾尝试使用regsvr32再次注册控件,但我很确定它们是,因为我可以在matlab中使用activeX。
我的问题是,为什么编译后的代码无法看到控件? 可能是问题是这台机器是64位,所以是activex服务器,而代码是在32位机器上编写的? 有没有办法告诉VS:“看,将运行的activex控件是这个吗?”
我真的迷失在这里,这是我第一次在VS中处理activex控件,所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
如果您使用的是64位计算机,那么如果CLSID位于HKEY_CLASSES_ROOT \ CLSID中,那么它就是64位控制。如果CLSID在HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID中,那么它是一个32位控件。 64位进程无法使用32位DLL,反之亦然。
如果您已将项目移植到VS 2012,如果控件是64位,为什么不将其构建为64位?
您必须在所需的体系结构中获取控件,或者必须将项目构建为与控件相同的体系结构。