OLE 控件的 CoCreateInstance 失败

CoCreateInstance of OLE control failed

我继承了一个使用 Thorlab activex 控件的 visual studio6 项目。 几年前,该项目曾在 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 MG17motor 控件完全对应。

我曾尝试使用 regsvr32 再次注册控件,但我很确定它们是,因为我可以在 matlab 中使用 activeX。

我的问题是,为什么编译后的代码看不到控件? 难道问题是这台机器是64位的,activex服务器也是,而代码是在32位机器上写的? 有没有办法告诉VS:"look, the activex control that will be running is this"?

我真的迷路了,这是我第一次在 VS 中处理 activex 控件,所以任何帮助将不胜感激。

如果你是64位机器,那么如果CLSID在HKEY_CLASSES_ROOT\CLSID那么,就是64位控件。如果 CLSID 在 HKEY_CLASSES_ROOT\Wow6432Node\CLSID 中,那么它就是一个 32 位控件。 64 位进程将无法使用 32 位 DLL,反之亦然。

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

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