我有一个小的非托管c ++应用程序,我正在尝试使用CoCreateInstance(...)来创建一个安装为ActiveX控件的“Adobe SVG PLayer”实例。
当我在32位配置下编译并运行我的应用程序时,它工作正常,但是当我在64位配置下编译时,我的应用程序无法创建Adove SVG Player的实例,尽管我知道它已安装。
这是我用来执行此操作的代码:
const CLSID CLSID_SVGCtl =
{0x377b5106,0x3b4e,0x4a2d,{0x85,0x20,0x87,0x67,0x59,0x0c,0xac,0x86}};
BOOL CheckSVGPresented()
{
BOOL bResult = FALSE;
try
{
IUnknown* pSvgCtrl = NULL;
if (FAILED(::CoCreateInstance(CLSID_SVGCtl, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (LPVOID*)&pSvgCtrl)) || (NULL == pSvgCtrl))
throw 1;
bResult = TRUE;
pSvgCtrl->Release();
}
catch (...)
{
bResult = FALSE;
}
return bResult;
}
我的猜测可能是因为我有64位主机(我的应用程序)试图创建一个32位的ActiveX dll实例(SVG播放器)。
我正在测试Windows 7,x64位版本。
因此,如果您对此有任何线索,我将非常感谢您的帮助。
答案 0 :(得分:0)
我假设您尝试加载的ActiveX DLL仅为32位。由于ActiveX组件通常是InProc,而64位应用程序无法加载32位DLL,因此您的猜测是正确的。
http://thermous.spaces.live.com/blog/cns!8DC85127F8CE2F12!161.entry