2010-02-17 41 views
1

我有一個小的非託管C++應用程序,我試圖使用CoCreateInstance(...)創建一個作爲ActiveX控件安裝的「Adobe SVG PLayer」實例。x64應用程序和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一個ActiveX dll的實例(SVG播放器)。

我正在測試Windows 7,x64位版本。

所以,如果你有任何線索,我會很感激的幫助。

+0

您是否爲64位版本重新編譯? – 2010-02-17 16:30:14

+0

是的,我確定。 – Vic 2010-02-17 16:58:59

回答

0

我假設您正在嘗試加載的ActiveX DLL只有32位。由於ActiveX組件通常是InProc,並且64位應用程序無法在32位DLL中加載,因此您的猜測是正確的。

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

+0

太糟糕了,那個鏈接不見了。但答案是正確的,64位進程無法加載任何形式的32位本機代碼。或相反亦然。編譯爲64位的應用程序只能使用也是64位的ActiveX。 – Spike0xff 2011-08-04 19:47:28