Ver Mensaje Individual
  #2  
Antiguo 30-09-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Reputación: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por raulb Ver Mensaje
Pero las funciones que necesito esta en una Interface IDevice y según un ejemplo en VB6 y transformado a delphi debería hacer

scannerid := scannero.device;

y de esa manera comenzar a utilizar las propiedades y funciones de esa interfase, pero ocurre algo curioso :

scannero.device es un Olevariant y no es compatible con el tipo Idevice definido para scannerid
Hola raulb.

Los tipos Variant y OLEVariant sí son compatibles con las interfaces.

La solución es declarar al elemento scannerid como OLEVariant, o bien asignarle scannero.device haciendo un molde de tipo (type casting):

Código Delphi [-]
scannerid := IInterface (scannero.device) As IDevice;

En efecto, aún cuando optes por la primera opción (declarar a scannerid como OLEVariant), podrás tratar a ese campo de la clase como un objeto.

scannerid.PropiedadX := Valor;
scannerid.MetodoX (Parametros);

Además de las expresiones de tipo clase y objeto, Delphi admite esta sintaxis con los valores de tipo Variant / OLEVariant. Claro, siempre que el variante en cuestión contenga una interfaz y la sentencia o expresión sea válida (si la propiedad o método no existe en la interfaz o están mal dados los parámetros, se elevará una excepción al ejecutarse).

Espero sea de utilidad.

Saludos.

Al González.
Responder Con Cita