2009-03-16 5 views
1

Je crée un objet COM à l'aide de Visual Studio 2008 et ATL. Ajouter des propriétés et des méthodes simples est assez facile mais maintenant je veux faire quelque chose de plus compliqué. Je veux donner accès à un l'objet C de via une propriété de mon objet COM, donc je peux faire quelque chose comme:Retour d'un objet en tant que propriété dans ATL

// 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.

Je devine que je dois ajouter un autre objet simple ATL à mon projet pour le second objet (appeler IClass2), et quelque chose comme ce qui suit dans l'IDL:

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

Suis-je sur la bonne piste ici? Est-ce que quelqu'un sait d'un bon tutoriel pour ce genre de chose?

Répondre

2

Si vous appelez depuis un langage d'automatisation, vous aurez besoin de l'interface retournée par IDispatch, et vous aurez probablement besoin de la renvoyer au moins en tant qu'IDispatch **. Pour retval je pense que c'est assez bon; pour les paramètres [out] simples, vous devez le passer en VARIANT * (avec le type de variante défini sur VT_LPDISPATCH) afin que le langage d'automatisation puisse le comprendre.

Je ne suis pas sûr s'il y a un bon tutoriel; ça fait un moment que je cherchais une référence complète. Le meilleur conseil que je pourrais donner serait de s'assurer que tout ce que vous passez est compatible avec l'automatisation (par exemple: est un type que vous pouvez mettre dans un VARIANT), et cela devrait prendre en charge 80% de vos problèmes. C'est très faisable, cependant; il suffit de lire sur MSDN et vous devriez aller bien.