<a name="guid"><h3>Macros de gestion des GUID</h3></a>
Les macros de GUID sont indépendants du reste du framework (les utiliser ne causera pas l'inclusion des fichiers include), donc ils peuvent aussi être utilisés uniquement pour faciliter l'accès à des objets externes COM.
Les macros viennent sous 3 noms, finissant par ...GUID, ...IID et...CLSID. Ils sont exactement les mêmes, ils existent juste séparément pour permettre d'écrire du code lisible.
<b><font color="#0000d0">DefineGUID</font></b>(Name, long, word1, word2, byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8)
<b><font color="#0000d0">DefineIID</font></b>(Name, long, word1, word2, byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8)
<b><font color="#0000d0">DefineCLSID</font></b>(Name, long, word1, word2, byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8)
Ce sont les mêmes que les macros correspondantes en C. A utiliser pour définir une GUID dans une ligne. La macro crée actuellement une DataSection avec un label appelé 'Name' et les données suivantes, donc le GUID peut être accédé plus tard via '?Name', où Name est le nom utilisé dans la définition. La macro est sûre pour un usage multiple. De multiples définitions de la même GUID seront ignorées, ce qui permet de simplement définir une GUID où c'est utile sans s'inquiéter de ce qui a été défini dans une autre partie du projet (d'autres includefile par exemple).
<u>Exemple:</u>
<blockquote>
; Definit l'IID IUnknown
;
DefineIID(IID_IUnknown, $00000000, $0000, $0000, $C0, $00, $00, $00, $00, $00, $00, $46)
;
; Utilise la valeur IID
;
SomeObject\QueryInterface(?IID_IUnknown, @NewPointer.IUnknown)
</blockquote>
<b><font color="#0000d0">DefineKnownGUID</font></b>(Name)
<b><font color="#0000d0">DefineKnownIID</font></b>(Name)
<b><font color="#0000d0">DefineKnownCLSID</font></b>(Name)
Le framework inclue un fichier resident appelé 'GuidList.res', qui contient une énorme macro contenant une liste des valeurs GUID extraites du Microsoft Platform SDK aussi bien que du DirectX9 SDK. (Nombre total : 2705 GUIDs) Ces macros permettent de facilement définir une valeur connue par son nom. La plupart des valeurs principales relatif à COM sont connues. Comme la liste est contenue dans une seul macro, la rapidité générale de compilation n'est pas affectée par la liste énorme. Ces macros sont protégés contre des utilisations multiples de la même manière que les macros Define...(), donc définir deux fois une valeur avec une de ces macros n'aura pas d'effet.
<u>Exemple:</u>
<blockquote>
; Définit l'IDD IUnknown, de la même manière
; Le résultat est le même que l'exemple ci dessus
;
DefineKnownIID(IID_IUnknown)
</blockquote>
<b><font color="#0000d0">CompareGUID</font></b>(guid1, guid2)
<b><font color="#0000d0">CompareIID</font></b>(iid1, iid2)
<b><font color="#0000d0">CompareCLSID</font></b>(clsid1, clsid2)
Compare les deux valeurs GUID et retourne 1 si elles sont égales et 0 autrement. C'est juste un simple wrapper de CompareMemory() afin d'écrire un code plus lisible.
<u>Exemple:</u>
<blockquote>
; Retourne 1 bien sûr
;
DefineKnownIID(IID_IUnknown)
Debug CompareIID(?IID_IUnknown, ?IID_IUnknown)
</blockquote>
Partager