x64应用程序和ActiveX控件的问题

时间:2010-02-17 16:17:16

标签: c++ 64-bit activex unmanaged

我有一个小的非托管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位版本。

因此,如果您对此有任何线索,我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我假设您尝试加载的ActiveX DLL仅为32位。由于ActiveX组件通常是InProc,而64位应用程序无法加载32位DLL,因此您的猜测是正确的。

http://thermous.spaces.live.com/blog/cns!8DC85127F8CE2F12!161.entry