【发布时间】:2015-08-18 07:14:55
【问题描述】:
所以我有一个 Visual C++ 应用程序,在我的代码中我使用 CoCreateInstance 函数来创建一个 COM 对象并从该对象获取一个接口:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
这个函数:
hr = CoCreateInstance(CLSID_CppCmnBL, NULL, CLSCTX_INPROC_SERVER,
IID_ICppCmnBL, reinterpret_cast<void**>(&m_pBL));
在 32 位版本的 windows 上运行良好,但在 64 位版本的 windows 上失败。
我到处查看,似乎在 64 位系统上注册 32 位对象存在问题。
相关问题:
http://forums.codeguru.com/showthread.php?400956-32-bit-app-CoCreateInstance-fails-on-64-bit
我得到的异常是:System.AccessViolationException
【问题讨论】:
-
32 位程序不能加载 64 位 DLL,反之亦然,这对于 COM 意味着进程内服务器必须与主机进程的位数相匹配。如果对象支持,您可以尝试将其创建为进程外服务器。
-
@JonathanPotter 好的,让我进一步解释一下,我的应用程序是一个 32 位应用程序,现在我试图在 64 位 Windows 上运行它,它运行良好,除了应用程序中的某些功能我必须使用 CoCreateInstance 函数,但它现在失败了。
-
@JonathanPotter 我的应用程序在 64 位 Windows 环境中作为 32 位进程运行
-
好的,你有正确注册的 32 位版本的 COM DLL 吗?
-
@JonathanPotter 我不想加载 64 位 dll