Проблема с приложением x64 и элементом управления ActiveX - PullRequest
1 голос
/ 17 февраля 2010

У меня небольшое неуправляемое приложение c ++, я пытаюсь использовать CoCreateInstance (...) для создания экземпляра «Adobe SVG PLayer», который устанавливается как элемент управления ActiveX.

Когда я компилирую и запускаю свое приложение в 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-битный экземпляр DLL ActiveX (проигрыватель SVG).

Я тестирую на Windows 7, 64-битная версия.

Так что если у вас есть какие-либо подсказки по этому поводу, я буду признателен за помощь.

1 Ответ

0 голосов
/ 17 февраля 2010

Я предполагаю, что ActiveX DLL, которую вы пытаетесь загрузить, является только 32-разрядной.Поскольку компоненты ActiveX обычно являются InProc, а 64-разрядные приложения не могут загружаться в 32-разрядные библиотеки DLL, то вы правы в своих предположениях.

...