COM+组件的CoCreateInstance失败,返回0x8007007e"找不到指定的模块"
CoCreateInstance of a COM+ component fails with 0x8007007e “The specified module could not be found”
我在64位Windows server 2008或64位Windows 7下的COM+目录中有一个COM+组件作为进程内服务器(库应用程序)运行。如果我在C:\Windows\System32中安装32位版本的组件并运行:
HRESULT hr = CoCreateInstance(CLSID_MyClsID, NULL, CLSCTX_INPROC_SERVER, IID_MyInterface, reinterpret_cast<void**>(&_interfaceInstance));
从一个32位的应用程序,一切正常。同样,如果我在C:\下安装该组件的64位版本,并从64位应用程序中调用CoCreateInstance,它将按预期运行。但是,如果我在C:\Windows\System32下安装该组件的64位版本,并尝试从64位应用程序调用CoCreateInstance,则返回值为0x8007007e,表示"找不到指定的模块"。在移动组件之前,我会特别小心地注销它。我还检查了注册表中的InProcServer键是否指向COM+dll的实际路径。我不明白的是,为什么除了在C:\Windows\System32??下安装64位之外,其他一切都能正常工作???任何想法或想法都会受到极大的赞赏。
通常情况下,将组件安装到C:WindowsSystem32
似乎是个坏主意:该文件夹归操作系统所有,不用于安装用户程序。
也就是说,您可能被文件系统重定向所困扰:当一个32位程序访问C:WindowsSystem32
时,它实际上被重定向到C:WindowsSysWOW64
。如果你的安装程序是32位的,那么它实际上并没有将你的64位组件写入你想要的文件夹。当你的64位应用程序运行时,它试图在"真正的"System32
文件夹中找到组件,但找不到。
我建议将组件的两个不同版本安装到%ProgramFiles%
下新文件夹的x86
和x64
子文件夹中。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- vcpkg 添加新库,但找不到
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 找不到Linux Visual Studio代码C++文件