PDA

Ver la Versión Completa : De C++ a Delphi (Interfaces / ActiveX)


jplj
20-04-2004, 18:18:34
Estoy usando un componente ActiveX con Delphi 7, cuento con un breve manual de ayuda del programador con ejemplos en C++. Tal como me indica el manual arrastro al formulario dos controles: TVisor y TCapa

TVisor implementa las interfaces IVisor (interfaz principal del visor) e ILayer (Gestor de Capas), esta última a su vez implementa el método AddLayer().

El ejemplo dice: "... para añadir la capa obtenemos el interfaz ILayer del visor e invocamos al método AddLayer pasándole la interfaz IUnknown de la capa ... ", que se traduce en:

ILayer layer(m_visor.GetControlUnknown());
layer->AddLayer(m_capa.GetControlUnknown())
m_visor.Initialize();

Esto en Delphi ¿cómo?.

En principio intenté:

m_visor.AddLayer(...);

pero delphi me dice que el identificador AddLayer no está declarado.

A partir de aquí he estado dandole vueltas pero ...

Muchas gracias de antemano.

roman
20-04-2004, 22:27:32
Mira, no sé mucho de esto pero me ha pasado que en ocasiones el control en sí no es el que implementa la interfaz sino que una propiedad del control es la que lo hace. A veces tal propiedad no es del tipo adecuado sino simplemente IUnknown por lo que debes obtener una interfaz ILayer mediante la función Supports o con QueryInterface.

// Saludos

jplj
21-04-2004, 18:20:09
Gracias por el consejo. Voy a ver...

jplj
24-04-2004, 12:50:43
He transfromado el código:
ILayer layer(m_visor.GetControlUnknown());
layer->AddLayer(m_capa.GetControlUnknown())
por
(m_visor As ILayer).AddLayer((m_capa As IUnknown), ...);
El primer parámetro de AddLayer debe ser la interfaz IUnknown del componente TCapa.
A la hora de compilar, no se producen errores, pero al ejecutarse esta linea aparece el error de Interfaz no soportada.
En primer lugar ¿es correcto el modelado con As?, y si lo es cómo podría
saber dónde surge el error, yo creo que puede surgir en cualquier de los dos modelados o bien en el propio método AddLayer. ¿Cómo podría averiguarlo?.