【问题标题】:CoCreateInstance of OLE control failedOLE 控件的 CoCreateInstance 失败
【发布时间】:2015-02-27 04:04:48
【问题描述】:

我继承了一个使用 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 MG17motor控件完全对应。

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

我的问题是,为什么编译后的代码看不到控件? 难道问题是这台机器是64位的,activex服务器也是,而代码是在32位机器上编写的? 有没有办法告诉VS:“看,要运行的activex控件就是这个”?

我真的迷路了,这是我第一次在 VS 中处理 activex 控件,因此将不胜感激。

【问题讨论】:

    标签: visual-studio-2012 com activex


    【解决方案1】:

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

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

    您必须获得所需架构中的控件,或者必须将项目构建为与控件相同的架构。

    【讨论】:

    • 何乔,感谢您的回答。该控件确实在 HKEY_CLASSES_ROOT\CLSID 中,因此它是一个 64 位控件(我从 Thorlabs 安装了 64 位软件包)。那我该如何构建到 64 位呢?
    • 您的评论非常有用,我设法解决了这个问题:我没有意识到我必须告诉 VS 为 64 台机器编译。我重新编译了项目中所需的所有库,以使它们成为 64 位的。然后我点击这个链接:msdn.microsoft.com/en-us/library/9yb4317s%28v=vs.80%29.aspx 让 VS 编译正确的版本,现在代码正在运行。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 2014-04-09
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多