Question

Je crée un objet COM à l'aide de Visual Studio 2008 et ATL. Il est assez facile d’ajouter des propriétés et des méthodes simples, mais je veux maintenant faire quelque chose de plus compliqué. Je veux donner l'accès à un objet C ++ via une propriété de mon objet COM, afin que je puisse faire quelque chose comme:

// Pseudo-code
var obj = CreateObject("progid");
obj.aProperty.anotherProperty = someValue;

Ainsi, aProperty renvoie une référence à un autre objet qui expose une propriété appelée anotherProperty .

J'imagine qu'il me faut ajouter un autre objet ATL simple à mon projet pour le deuxième objet (appelez-le IClass2 ) et que le code IDL ressemble à ce qui suit:

[propget, id(1)] HRESULT aProperty([out, retval] IClass2** ppValue);

Suis-je sur la bonne voie ici? Est-ce que quelqu'un connaît un bon tutoriel pour ce genre de chose?

Était-ce utile?

La solution 2

Je viens de tomber sur cet article:

HOWTO: Implémentez des hiérarchies d'objets statiques dans ATL

Cela ressemble beaucoup à ce que j'essaie de réaliser.

Autres conseils

Si vous voulez l'appeler depuis un langage d'automatisation, vous aurez besoin que l'interface soit à nouveau dérivée d'IDispatch et vous devrez probablement la renvoyer au moins sous la forme d'un IDispatch **. Pour Retval, je pense que cela suffit. pour les paramètres [out] simples, vous devez le passer en tant que VARIANT * (avec le type de variante défini sur VT_LPDISPATCH) afin que le langage d'automatisation puisse le comprendre.

Je ne sais pas s'il existe un bon tutoriel; ça faisait longtemps que je cherchais une référence complète. Le meilleur conseil que je puisse vous donner serait de vous assurer que tout ce que vous transmettez est compatible avec l'automatisation (par exemple: est un type que vous pouvez mettre dans une VARIANT), ce qui devrait résoudre 80% de vos problèmes. C'est très faisable, cependant; Il suffit de lire sur MSDN et ça devrait aller.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top