Pregunta

Estoy creando un objeto COM usando Visual Studio 2008 y ATL. Agregar propiedades y métodos simples es bastante fácil, pero ahora quiero hacer algo más complicado. Quiero dar acceso a un objeto C ++ a través de una propiedad de mi objeto COM, para poder hacer algo como:

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

Entonces, aProperty devuelve una referencia a otro objeto que expone una propiedad llamada anotherProperty .

Supongo que necesito agregar otro objeto ATL simple a mi proyecto para el segundo objeto (llámelo IClass2 ), y tener algo como lo siguiente en el IDL:

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

¿Estoy en el camino correcto aquí? ¿Alguien sabe de un buen tutorial para este tipo de cosas?

¿Fue útil?

Solución 2

Acabo de encontrar este artículo:

CÓMO: Implementar jerarquías de objetos estáticos en ATL

Esto se parece mucho a lo que estoy tratando de lograr.

Otros consejos

Si va a llamarlo desde un lenguaje de automatización, necesitará que la interfaz devuelta se derive de IDispatch, y es probable que deba devolverla al menos como IDispatch **. Para retval creo que es lo suficientemente bueno; para parámetros simples [out] necesita pasarlo como VARIANT * (con el tipo de variante establecido en VT_LPDISPATCH) para que el lenguaje de automatización pueda entenderlo.

No estoy seguro si hay un buen tutorial; Ha pasado un tiempo desde que busqué una referencia completa. El mejor consejo que podría dar sería asegurarme de que todo lo que está pasando sea compatible con la automatización (por ejemplo: es un tipo que puede incluir en un VARIANTE), y que debería solucionar el 80% de sus problemas. Sin embargo, es muy factible; solo lea en MSDN y debería estar bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top