OLE控制的CoCreateInstance失败

时间:2015-02-26 19:06:46

标签: visual-studio-2012 com activex

我继承了一个使用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控件,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

如果您使用的是64位计算机,那么如果CLSID位于HKEY_CLASSES_ROOT \ CLSID中,那么它就是64位控制。如果CLSID在HKEY_CLASSES_ROOT \ Wow6432Node \ CLSID中,那么它是一个32位控件。 64位进程无法使用32位DLL,反之亦然。

如果您已将项目移植到VS 2012,如果控件是64位,为什么不将其构建为64位?

您必须在所需的体系结构中获取控件,或者必须将项目构建为与控件相同的体系结构。