2010-02-17 9 views
1

J'ai une petite application C++ non gérée, j'essaie d'utiliser CoCreateInstance (...) pour créer une instance de "Adobe SVG PLayer" qui est installé en tant que contrôle ActiveX. Lorsque je compile et exécute mon application en configuration 32 bits, cela fonctionne correctement, mais lorsque je compile sous une configuration 64 bits, mon application ne parvient pas à créer l'instance du lecteur SVG Adove, même si je sais qu'elle est installée. .Problème avec l'application x64 et le contrôle ActiveX

Voici le code que j'utilise pour ce faire:


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; 
} 

Je pense que probablement je un problème parce que j'ai un hôte (ma demande) 64 bits essayant de créer un 32- bits d'une DLL ActiveX (le lecteur SVG).

Je suis en train de tester Windows 7, version x64 bits.

Donc, si vous avez la moindre idée à ce sujet, je vais apprécier l'aide.

+0

Avez-vous recompilé pour la version 64 bits? –

+0

oui, bien sûr que je l'ai fait. – Vic

Répondre

0

Je suppose que la DLL ActiveX que vous essayez de charger est 32 bits uniquement. Étant donné que les composants ActiveX sont généralement InProc et que les applications 64 bits ne peuvent pas être chargées dans des DLL 32 bits, vous avez raison.

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

+0

trop mauvais, ce lien est parti. Mais la réponse est correcte, le processus 64 bits ne peut charger aucune forme de code natif 32 bits. Ou vice versa. Application compilée en 64 bits peut uniquement utiliser ActiveX qui est également 64 bits. – Spike0xff