COM +组件的CoCreateInstance失败,0x8007007e“无法找到指定的模块”

时间:2013-12-27 01:21:38

标签: c++ windows com+

我有一个COM +组件在64位Windows Server 2008或64位Windows 7下的COM +目录中作为进程内服务器(库应用程序)运行。如果我在C:\ Windows中安装32位版本的组件\ System32并运行:

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位安装之外一切正常?任何想法或想法都非常感激。

1 个答案:

答案 0 :(得分:2)

将组件安装到C:\Windows\System32似乎是一个坏主意:该文件夹归操作系统所有,不适用于安装用户程序。

也就是说,您可能被file system redirection咬了一下:当32位程序访问C:\Windows\System32时,它实际上被重定向到C:\Windows\SysWOW64。如果您的安装程序是32位,则实际上并不是将64位组件写入您期望的文件夹。当您的64位应用程序运行时,它会尝试在“真正的”System32文件夹中找到该组件,但无法找到它。

我建议您将组件的两个不同版本安装到x86下新文件夹的x64%ProgramFiles%子文件夹中。