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