FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
De C++ a Delphi (Interfaces / ActiveX)
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: Código:
ILayer layer(m_visor.GetControlUnknown()); layer->AddLayer(m_capa.GetControlUnknown()) m_visor.Initialize(); En principio intenté: Código:
m_visor.AddLayer(...); A partir de aquí he estado dandole vueltas pero ... Muchas gracias de antemano. |
#2
|
||||
|
||||
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 |
#3
|
|||
|
|||
Gracias por el consejo. Voy a ver...
|
#4
|
|||
|
|||
He transfromado el código:
Código:
ILayer layer(m_visor.GetControlUnknown()); layer->AddLayer(m_capa.GetControlUnknown()) Código:
(m_visor As ILayer).AddLayer((m_capa As IUnknown), ...); 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?. |
|
|
|