Cómo acceder al Interfaz ISiteKiosk
Códigos de ejemplo sobre cómo acceder al Interfaz ISiteKiosk desde distintos lenguajes de programación.
Es posible acceder al objeto SiteKiosk a través del interfaz ISiteKiosk. El interfaz sólo se puede recuperar desde una
instancia en ejecución de SiteKiosk.
Para acceder al interfaz ISiteKiosk, necesitará solicitar un interfaz a la clase SiteKioskClassFactory. Necesitará
el método COM-Method CoGetClassObject(...) suministrado por la Librería 'ole32.dll'. Llamando a CoGetClassObject(...)
interrogará un interfaz ISiteKioskFactory. Este interfaz suministra el método CreateSiteKiosk, que devuelve un interfaz
ISiteKiosk-inteface a la instancia actualmente en ejecución de SiteKiosk.
Los siguientes ejemplos le muestran como conseguir la versión actual de SiteKiosk a través del interfaz ISiteKiosk en los siguientes
lenguajes de programación:
Microsoft Visual Basic .NET
Microsoft Visual C# .NET
Borland Delphi 7
Microsoft Visual Basic .NET
El siguiente ejemplo muestra cómo acceder al objeto SiteKiosk desde Microsoft Visual Basic .NET
Necesitará importar la librería SiteKiosk Runtime Type Library para tener acceso a los interfaces COM.
Por tanto, vaya al men&aucte; 'Project' y selecciones 'Add Reference'. Cambie a la pestaña 'COM' y seleccione la entrada
'SiteKioskRuntime 1.0 Type Library' desde la lista. Ahora, haciendo clic en el bot´n 'OK', los interfaces COM se imporarán a
su proyecto.
Añada el siguiente código con las declaraciones de importación al principio de su archivo fuente:
Imports SiteKioskRuntimeLib
Imports System
|
Para importar la función CoGetClassObject() desde ole32.dll añada el siguiente código a su
global namespace:
Declare Function CoGetClassObject Lib "ole32.dll" (ByRef rclsid As Guid, ByVal dwClsContext As Integer, ByVal pServerInfo As IntPtr, ByRef riid As Guid, ByRef ppv As IntPtr) As Integer
|
El siguiente código fuente muestra cómo conseguir la versión de la instancia SiteKiosk. Si SiteKiosk no está
ejecutándose, la función devuelve el valor false. Si SiteKiosk está ejecutándose y la versión se lee con
éxito, la función devolverá True y el parámetro as_Value se completará con la versión de SiteKiosk.
Private Function GetSiteKioskVersion(ByRef as_Version) As Boolean
REM returns false, then SiteKiosk is not available
REM otherwise, True is returned and as_Version will contain
REM the current Siteiosk version
Dim IID_ISiteKioskFactory As Guid
Dim CLSID_SiteKioskFactory As Guid
Dim IID_ISiteKiosk As Guid
REM retrieve the needed interface-id's and class-id's
IID_ISiteKioskFactory = GetType(SiteKioskFactory).GUID()
CLSID_SiteKioskFactory = GetType(SiteKioskFactoryClass).GUID()
IID_ISiteKiosk = GetType(SiteKiosk).GUID()
REM get interface of SiteKioskFactory
Dim li_Unk_ As IntPtr = New IntPtr
Dim li_Hr As Integer = CoGetClassObject(CLSID_SiteKioskFactory, 4, New IntPtr, IID_ISiteKioskFactory, li_Unk_)
If li_Hr <> 0 Then
REM sitekiosk is not running
Return False
End If
REM convert the IntPtr to the requested interface
Dim lr_SiteKioskFactory_ As SiteKioskFactory = System.Runtime. InteropServices.Marshal.GetObjectForIUnknown(li_Unk_)
Dim li_ISiteKioskUnknown_ As IntPtr
REM get an interface on the running instance of SiteKiosk
lr_SiteKioskFactory_.CreateSiteKiosk(IID_ISiteKiosk, li_ISiteKioskUnknown_)
If (li_ISiteKioskUnknown_.Equals(IntPtr.Zero)) Then
REM SiteKiosk was not running and could not be launched
Return False
End If
REM convert the returned IntPtr to the requested interface
Dim lr_ISiteKiosk_ As ISiteKiosk = System.Runtime.InteropServices. Marshal.GetObjectForIUnknown(li_ISiteKioskUnknown_)
REM read out the version of SiteKiosk
Dim lk_Version As ISKVersion = lr_ISiteKiosk_.Version()
as_Version = lk_Version.VersionString
Return True
End Function
|
Microsoft Visual C# .NET
El siguiente ejemplo muestra cómo acceder al objeto SiteKiosk desde Microsoft Visual C# .NET
Necesitará importar la librería SiteKiosk Runtime Type Library para tener acceso a los interfaces COM.
Por tanto, baya al men´ 'Project' y seleccione 'Add Reference'. Cambie a la pestaña 'COM' y seleccione
la entrada 'SiteKioskRuntime 1.0 Type Library' desde la lista. Ahora, haciendo clic en el botón 'OK', los interfaces COM
se importarán en su proyecto.
Añada el siguiente código fuente al principio de su fichero fuente:
using System.Runtime.InteropServices;
using SiteKioskRuntimeLib;
|
Para importar el la función CoGetClassObject() desde ole32.dll añada el siguiente código a su
global namespace:
[DllImport("ole32.dll", CallingConvention=CallingConvention.StdCall)]
public static extern int CoGetClassObject
( ref Guid rclsid
, uint dwClsContext
, IntPtr pServerInfo
, ref Guid riid
, out IntPtr ppv);
|
El siguiente código fuente le muestra cómo conseguir la versión de la instancia SiteKiosk. Si SiteKiosk no está
ejecutándose, la función devuelve el valor false. Si SiteKiosk está ejecutándose y la versión se lee con
éxito, la función devolverá True y el parámetro as_Value se completará con la versión de SiteKiosk.
public bool GetSiteKioskVersion(ref string as_Version)
{
/*
returns false, if SiteKiosk is not currently running
return true, if SiteKiosk is running and sets 'as_Version'
to the version of SiteKiosk
*/
// initialize GUID's for classes and interfaces
Guid lr_FactoryGuid = typeof(ISiteKioskFactory).GUID;
Guid lr_FactoryClass = typeof(SiteKioskFactoryClass).GUID;
Guid lr_SiteKioskGuid = typeof(ISiteKiosk).GUID;
ISiteKiosk mk_pSiteKiosk;
// try to get the ISiteKioskFactory interface of the instance
// of SiteKioskFactoryClass
IntPtr lk_FactoryPtr = new IntPtr();
CoGetClassObject(ref lr_FactoryClass, 4, new IntPtr(), ref lr_FactoryGuid, out lk_FactoryPtr);
if (lk_FactoryPtr == IntPtr.Zero)
// SiteKiosk is not running
return false;
// convert the received IntPtr to the requested ISiteKioskFactory
// interface
ISiteKioskFactory lk_Factory = (ISiteKioskFactory)Marshal. GetObjectForIUnknown(lk_FactoryPtr);
if (lk_Factory == null)
return false;
// call CreateSiteKiosk to get the ISiteKiosk interface of the
// current instance of SiteKiosk
IntPtr lk_SiteKioskPtr = new IntPtr();
lk_Factory.CreateSiteKiosk(ref lr_SiteKioskGuid, out lk_SiteKioskPtr);
if (lk_SiteKioskPtr == IntPtr.Zero)
return false;
// convert the received IntPtr to the requested
// ISiteKioskFactory interface
mk_pSiteKiosk = (ISiteKiosk)Marshal.GetObjectForIUnknown (lk_SiteKioskPtr);
if (mk_pSiteKiosk == null)
return false;
// get the version of SiteKiosk
ISKVersion lr_SKVersion = (ISKVersion)mk_pSiteKiosk.Version;
as_Version = lr_SKVersion.VersionString;
return true;
}
|
Dos códigos de ejemplo para projectos C# utilizando el SiteKiosk Object Model:
Ejemplo con interfaz gráfica de usuario
Ejemplo para aplicación de línea de comandos
Borland Delphi 7
El siguiente ejemplo muestra cómo acceder al objeto SiteKiosk desde Borland Delphi 7
Para acceder a los interfaces SiteKiosk, antes deberá importar la librería Type Library.
Haga clic en Project en el menú y elija Import Type Library .... En la lista, seleccione
SiteKiosk Runtim 1.0 Type Library (Version 1.0) y haga clic en Create Unit.
Ahora, el archivo 'SiteKioskRuntimeLib_TLB.pas' se creará automáticamente y será añdido a
su projecto. Delphi utiliza una variable global llamada 'Application' que está en conflicto con un valor determinado de SiteKiosk
y por tanto causa errores al compliar el proyecto.
Abra 'SiteKioskRuntimeLib_TLB.pas' y busque el resultado para el valor 'Application'
( line 197: Application = $00000003; ). Ahora, o bien cambie el nombre o borre la línea completa.
Ahora, su proyecto delphi debería poder compilarse correctamente.
Necesita vincular su proyecto a la unidades 'ActiveX' unit y 'SiteKioskRuntimeLib_TLB' unit.
'ActiveX' implementa la función CoGetClassObject(...) y SiteKioskRuntimeLib_TLB implementa
la CLSID's, IID's e interfaces de la librería type SiteKiosk type. Asegúrese, que su sección uses-section
contiene las siguientes líneas:
uses
ActiveX, SiteKioskRuntimeLib_TLB;
|
El siguiente código fuente le muestra cómo conseguir la versión de la instancia SiteKiosk. Si SiteKiosk no está
ejecutándose, la función devuelve el valor false. Si SiteKiosk está ejecutándose y la versión se lee con
éxito, la función devolverá True y el parámetro as_Value se completará con la versión de SiteKiosk.
function GetSiteKioskVersion(var as_Version : WideString) : Boolean;
var
lr_SiteKioskFactory_ : ISiteKioskFactory;
lr_ISiteKiosk_ : ISiteKiosk;
lr_Version_ : ISKVersion;
lr_IUnknown_ : IUnknown;
lr_IDispatch_ : IDispatch;
begin
GetSiteKioskVersion := false;
// get interface of the SiteKioskClass-Factory
CoGetClassObject(CLASS_SiteKioskFactory, 4, nil, IID_ISiteKioskFactory, lr_IUnknown_);
if (lr_IUnknown_ = nil) then exit; // SiteKiosk is not running
// convert the return value of type IUnknown to the needed interface
lr_IUnknown_.QueryInterface(IID_ISiteKioskFactory, lr_SiteKioskFactory_);
// get the interface of the running instance of SiteKiosk
lr_SiteKioskFactory_.CreateSiteKiosk(IID_ISiteKiosk, pointer(lr_ISiteKiosk_));
if (lr_ISiteKiosk_ = nil) then exit;
// get the version's IDispatch interface
lr_IDispatch_ := lr_ISiteKiosk_.Version;
if (lr_IDispatch_ = nil) then exit;
// query IDispatch for the ISKVersion interface
lr_IDispatch_.QueryInterface(IID_ISKVersion, lr_Version_);
if (lr_Version_ = nil) then exit;
as_Version := lr_Version_.VersionString;
GetSiteKioskVersion := true;
end;
|
Applies to
Válido para SiteKiosk v5.0 (y versiones superiores).
Volver arrriba
|