![]() |
Utilizando COM con delphi
Tengo una DLL registrada que me genero un UCBioBSPCOMLib_TLB.pas,
Creo un form y en el uses cito UCBioBSPCOMLib_TLB, hasta ahi todo ok, pero UCBioBSPCOMLib_TLB.pas es una clase con 7 interfaces, en consecuencia cuando la quiero usar type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private scannero : UCBioBSP; scannerid : IDevice; { Private declarations } public { Public declarations } end; scannero := CreateComObject(CLASS_UCBioBSP) as UCBioBSP; hasta aca todo ok, porque puedo acceder a las propiedades y funciones 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 Existe alguna forma de al momento de crear el objeto createcomobject, se puede crear las demas interfaces ???. y si no como las inicializo para poder utilizarla ??? Gracias showmessage(inttostr(scannero._Release)); showmessage(scannero.MajorVersion); showmessage(scannero.MinorVersion); scannerid := scannero. showmessage(inttostr(scannerid.OpenedDeviceID)); |
Cita:
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):
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. :) |
La franja horaria es GMT +2. Ahora son las 04:23:05. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi