2011-02-09 2 views
1

J'ai deux DLL COM. Les deux implémentent ATL :: CAtlDllModuleT <>. D'après ce que je comprends, cette classe fait le sale boulot d'enregistrer et de désinscrire les objets COM. Y a-t-il un moyen de fusionner ces deux en un?ATL & COM - Plusieurs serveurs, un binaire?

class CFoo : public ATL::CAtlDllModuleT<CFoo> 
{ 
public : 
    DECLARE_LIBID(LIBID_FooLib) 
    DECLARE_REGISTRY_APPID_RESOURCEID(IDR_FOOINTERFACE, "{4E6823F7-230B-4D6C-9195-571B94B32859}") 
}; 

Les deux projets que j'ai, l'un est le DLL et l'autre est le LIB (qui est lié).

Répondre

1

Voir macro OBJECT_ENTRY_AUTO qui crée un lien entre un objet clsid et votre objet d'implémentation pour prendre en charge l'enregistrement, l'initialisation et la création d'une classe. Vous utilisez juste la macro pour chaque clsid que vous voulez de cette exe/dll.

+0

C'est tout? Cela semble un peu trop facile pour COM. – MarkP

+0

Oh, je suis sûr qu'il y aura un autre enfer pour aider à équilibrer cette apparence facile. Mais c'est de mon expérience. –

+0

+1 @ user318811: Cela devrait suffire - vous utilisez simplement cette macro (ou une autre équivalente) pour dire à ATL "Je veux exposer cette classe à l'enregistrement" et si vous avez une typelib, vous devez également le mentionner. Ces macros remplissent une carte globale de choses qui doivent être enregistrées lorsque 'DllRegisterServer()' est appelé. Peut-être que quelque chose va se casser, mais ATL est livré avec des sources, de sorte que vous pouvez déboguer ces problèmes assez facilement. – sharptooth

Questions connexes