Le premier site francophone dédié au développement Pocket PC


Présentation et utilisation de "OSI Utility Library"
 
   


C'est une librairie ActiveX

Une librairie ActiveX est une DLL qui utilise pour communiquer avec le programme qui l'utilise le protocole ActiveX, appellé aussi COM (Component Object Model). Ce protocole de communication entre le client (programme utilisateur) et le serveur (la DLL) permet au client de créer des objets et d'en invoquer les méthodes, d'en lire et d'en modifier les propriétés et d'en recevoir des événements. Avec un serveur ActiveX (DLL ou exécutable) le programmeur a l'impression de travailler avec des objets inclus dans son application, et c'est plutôt confortable.

OSI Utility de Odyssey software

Odyssey software est une société qui développe des composants ActiveX pour Pocket PC. Cette société a eu la très bonne idée de créer une DLL ActiveX qui, utilisée avec eVB, lui ajoute des fonctions extrêmement utiles, et comme une bonne nouvelle ne vient jamais seule, sachez que cette librairie est 100% gratuite !!!

Télécharger la librairie OSI Utility

OSIUTIL

Pour commencer il vous faut télécharger le programme d'installation qui placera sur votre PC et sur votre Pocket PC la librairie. La libraire installée sur le PC n'est là que pour permettre à eVB de vous donner la liste des objets, méthodes et propriétés dans l'IDE.

Pour utiliser dans des conditions confortables cette librairie, il faut la sélectionner dans la lisite des références de votre projet.

 

OSIUTIL publie 4 objets :

Win32 Permet d'utiliser une version améliorée de "CreateObject"
Collection Permet d'utiliser des collections comme avec VB (le grand frère)
File Permet de travailler avec des variants dans les fichiers
Registry Permet de travailler sur la base de registre

L'objet Win32

L'instanciation de l'objet 'Win32' s'effectue comme pour les autres objets ActiveX, en utilisant la méthode 'CreateObject' fournie par eVB :

Dim wWin32 As OSIUTIL.Win32
Set wWin32 = CreateObject("OSIUTIL.Win32")

Cet objet fournit une nouvelle méthode 'CreateObject' qui ne provoque pas de perte de mémoire. En effet, la méthode 'CreateObject' fourni par eVB réagit très mal lorsqu'elle est utilisée pour créer un objet qui publie des énumérations, comme par exemple certains objets fournis par ADOCE.

Ce que les développeurs d'Odyssey Software préconisent est d'utiliser le 'CreateObject' de eVB pour instancer l'objet 'Win32' de leur librairie, puis d'utiliser uniquement le 'CreateObject' fourni par cet objet 'Win32' :

Dim wWin32 As OSIUTIL.Win32
Dim wRecordset As ADOCE.Recordset
Set wWin32 = CreateObject("OSIUTIL.Win32")
Set wRecordset = wWin32.CreateObject("ADOCE.Recordset.3.0")

L'objet Collection

Lorsqu'on a l'habitude de développer avec VB (le grand frère de eVB), on est vraiment frustré de ne pouvoir utiliser les 'Collections' avec eVB. Il faut rappeler que les collections sont des sortes de tableaux de pointeurs vers des objets avec la possibilité d'avoir pour chaque entrée ce pseudo tableau une clé qui permet de retrouver un élément par cette clé. Si vous éliminez un élement, il n'y a pas de trou, les éléments qui suivaient celui que l'on enlève remontent tous d'un cran et l'objet pointé par cet élément n'est pas détruit, sauf si la collection était la dernière à faire référence à cet objet, dans ce cas, il est automatiquement détruit par les mechanismes de gestion de la mémoire de eVB.

L'objet 'Collection' fourni par la librairie OSIUTIL permet de gérer une collection avec :

3 propriétés

Count Nombre d'élements dans la collection
Item(index) Elément dont le rang est index ou la clé est index
OptionBase Permet de choisir si le premier élément commence à l'index 0 ou 1

 

 

et 4 méthodes

Add(item, key) Ajoute un objet et sa clé à la collection
Remove(index) Elimine l'item de rang index ou de clé index
Clear() Elimine tous les items de la collection
Key(index) Retourne la clé de l'item de rang index

 

 

 

Nous allons par exemple créer une collection à laquelle nous allons ajouter 3 objets de type TextBox (présents sur la feuille où s'execute le code), puis nous allons modifier ces objets au travers de la collection :

Sub TestCollection()

Dim wCollection As OSIUTIL.Collection
Dim wTextBox as TextBox

Rem Instanciation de la collection, avec le CreateObject de eVB, car l'objet
Rem Collection ne publie pas d'énumération
Set wCollection = CreateObject("OSIUTIL.Collection")

Rem On ajoute les 3 Textbox à la collection
Call wCollection.Add(Text1, "PREMIER")
Call wCollection.Add(Text2, "SECOND")
Call wCollection.Add(Text3, "TROISIEME")

Rem Comme les collection peuvent stocker tous types de données,
Rem On va ajouter une chaine avec "CHAINE1" comme clé.
Call wCollection.Add("Bonjour", "CHAINE1")

Rem Nous allons maintenant modifier la propriété .Text des 3 Textboxs
Rem Au travers de la collection directement
wCollection.Item("PREMIER").Text = "Toto"
wCollection.Item("SECOND").Text = "Titi"
wCollection.Item(3) = "Tutu"

Rem Nous allons passer par une variable intermédiaire
Set wTextBox = wCollection.Item("SECOND")
wTextBox.Text = "Tralala"

Rem Nous allons afficher la chaine stockée
Msgbox wCollection.Item("CHAINE1")

Rem Pour finir nous éliminons l'item "PREMIER"
Call wCollection.Remove("PREMIER")

End Sub

L'objet File

L'objet 'File' permet de lire et d'écrire des tableaux d'octets. Cet objet publie 2 méthodes :

FileToVariantByteArray(filename) Retourne le contenu d'un fichier en tableau de byte
VariantByteArrayToFile(filename, bytearray) Transforme un tableau de bytes en fichier

 

 

Ces méthodes permettent de gérer des fichiers binaires :

Dim wFile As OSIUTIL.File
Dim wData As Variant

Set wFile = CreateObject("OSIUTIL.File")
wData = wFile.FileToVariantByteArray("\Windows\head.gif")
Call wFile.VariantByteArrayToFile("\Windows\head2.gif", wData)
MsgBox "Le fichier fait " & (Ubound(wData) - LBound(wData)+1) & " octets."
Set wFile = Nothing

L'objet Registry

Cet objet permet de manipuler la base de registre. Cet objet publie 6 méthodes :

OpenKey Ouvre la clé stipulée, si elle n'existe pas, OpenKey peut la créer
CloseKey Ferme la clé actuellement ouverte
DeleteKey Détruit la clé stipulée
GetValue Retourne la valeur de la clé actuellement ouverte
SetValue Règle la valeur de la clé actuellement ouverte
DeleteValue Détruit la valeur de la clé actuellement ouverte

Important : Un objet 'Registry' permet de travailler avec une seule clé à la fois, si vous devez travailler sur plusieurs clés en même temps, il vous faudra utiliser (donc instancier) plusieurs objets de type 'Registry'.

Dans l'exemple qui suit, nous allons lire le contenu d'une clé (fictive), et en créer une autre. Comme l'objet 'Registry' publie des énumérations, nous devons utiliser les services du 'CreateObject' proposé par la libraire afin d'éviter les pertes de mémoire :

Dim wWin32 As OSIUTIL.Win32
Dim wReg As OSIUTIL.Registry
Dim wValeur1 As Integer

Rem Instanciation des objets nécessaires
Set wWin32 = CreateObject("OSIUTIL.Win32"
Set wReg = wWin32.CreateObject("OSIUTIL.Registry")

Rem Lecture du contenu d'une clé, si elle n'existe pas, il faut la créer
Call wReg.OpenKey(hKeyLocalMachine, "MonApp\Params", True)
wValeur1 = wReg.GetValue("NombreCouleurs")
Call wReg.CloseKey

Rem On écrit cette valeur dans une autre clé
Call wReg.OpenKey(hKeyLocalMachine, "MonApp\Backup", True)
Call wReg.SetValue("NombreCouleurs2", cLng(wValeur1))
Call wReg.CloseKey

Important : Le paramètre 'Value' de la méthode 'SetValue' est un variant. C'est le type interne de se variant qui détermine si la clé est de type chaine ou long (DWORD).

En conclusion...

Cette librairie est vraiment très utile, elle apporte des fonctions qui simplifient vraiment la dure vie des petits développeurs que nous sommes ;) et en plus elle est 100% gratuite !

Si vous l'utilisez dans vos applications il faudra juste ne pas oublier de l'inclure correctement au package d'installation !

Stéphane Sibué

 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.