IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Notions fondamentales
        Que signifie WINAPI ?
        Qu'est-ce qu'une fonction callback ?
        Que signifie CALLBACK ?
        Qu'est-ce que ANSI et Unicode ?
        Qu'est-ce que CHAR et WCHAR ?
        Quel est le rôle des macros UNICODE et _UNICODE ?
        Que sont les pages de code ?
        Quelle est la différence entre OEM et ANSI ?
        Un handle est-il un pointeur ?
        Qu'est-ce qu'un handle global ?



Que signifie WINAPI ?
auteur : Melem
WINAPI est une macro qui représente la convention d'appel utilisée par les APIs de Windows. Actuellement, c'est la convention d'appel standard (__stdcall) qui est utilisée (à ne pas confondre avec la convention d'appel "par défaut" utilisée en C (__cdecl)).


Qu'est-ce qu'une fonction callback ?
auteur : Melem
Une fonction callback est une fonction définie par l'application et qui sera automatiquement appelée par le système quand certains événements se produisent. Une callback n'est jamais appelée par l'application elle-même.


Que signifie CALLBACK ?
auteur : Melem
CALLBACK est une macro qui représente la convention d'appel que doivent utiliser les fonctions callback. Actuellement, c'est la convention d'appel standard (__stdcall) qui est utilisée (à ne pas confondre avec la convention d'appel "par défaut" utilisée en C (__cdecl)).


Qu'est-ce que ANSI et Unicode ?
auteur : Melem
ANSI est un jeu de caractères qui utilise 8 bits pour coder un caractère (à ne pas confondre avec l'ANSI - American National Standards Institute - bien que ce code tire son nom de cet organisme). C'est une extension Microsoft au code ASCII qui n'utilise que 7 bits par caractère. Dans l'environnement graphique de Windows, les caractères sont codés en utilisant le code ANSI.

Unicode est une norme qui attribue un code (un index) unique au monde à n'importe quel caractère (latin, hébreu, arabe, grec, symbole mathématique, etc.) en utilisant 16 bits par caractère. Il existe cependant plusieurs encodages Unicode (un encodage Unicode est un système d'encodage dans lequel chaque caractère est représenté par un code qui correspond d'une manière dépendante de ce système au code de ce même caractère dans la table des caractères Unicode). Le jeu de caractères complet de Windows (utilisé en interne) est constitué de caractères Unicode. Il y a donc toujours une conversion ANSI vers Unicode ou Unicode vers ANSI chaque fois que l'on fournit ou l'on demande une chaîne ANSI à Windows, la conversion de Unicode vers ANSI n'étant pas systématiquement sans perte. Les applications sont également capables de passer ou de lire une chaîne Unicode à Windows, en utilisant des fonctions spécifiques.


Qu'est-ce que CHAR et WCHAR ?
auteur : Melem
CHAR (char) représente un caractère ANSI (8 bits) et WCHAR (wchar_t) un caractère Unicode (16 bits).


Quel est le rôle des macros UNICODE et _UNICODE ?
auteurs : Melem, Médinoc
La macro UNICODE permet de contrôler la compilation des fichiers sources utilisant les fonctions de l'API Windows. Par exemple, quand UNICODE est définie :

  • TCHAR est remplacé par WCHAR sinon simplement par CHAR
  • TEXT("Bonjour") est remplacé par L"Bonjour" sinon simplement par "Bonjour"
  • MessageBox(..., TEXT("Bonjour"), ...) est remplacé par MessageBoxW(..., L"Bonjour", ...) sinon par MessageBoxA(..., "Bonjour", ...)
  • etc.

La macro _UNICODE joue le même rôle que la macro UNICODE mais pour les "fonctions" de tchar.h (qui est un fichier de la bibliothèque d'exécution du C et non un fichier de l'API Windows). Par exemple, quand _UNICODE est définie :

  • _TCHAR est remplacé par wchar_t sinon simplement par char
  • _TEXT("Bonjour") est remplacé par L"Bonjour" sinon simplement par "Bonjour"
  • _tprintf(_TEXT("Bonjour.\n")) est remplacé par wprintf(L"Bonjour.\n") sinon par printf("Bonjour.\n")
  • etc.

Ces macros servant donc à contrôler les versions des fonctions à utiliser, il est déconseillé de définir l'une sans l'autre. A noter que sous Visual Studio 2005 et plus récents, ces macros sont par défaut définies pour tout nouveau projet.


Que sont les pages de code ?
auteur : Médinoc
Les pages de code sont une notion datant au moins de MS-DOS. À cet époque-là, on n'avait que huit bits pour représenter les caractères, mais bien plus de 255 en tout. On ne pouvait donc en supporter que 255 à la fois, il fallait donc choisir. Ces choix furent regroupés dans divers "character sets" (ou charsets), et sous les environnement Microsoft, ces ensembles de caractères sont répertoriés dans les Pages de Codes numérotées. Sous un Windows moderne, ces pages de code sont toujours utilisées lors de la traduction d'une chaîne de caractères dite "ANSI" vers une chaîne de caractères Unicode. Parmi les pages de code les plus connues figurent:

  • La page de code n°437, antique page de codes de DOS. Elles comporte beaucoup de caractères de "dessin", mais n'est pas adaptée aux accents Français.
  • La page de code n°850 est la version européenne de la page de code 437. Elle est adaptée au Français, et encore utilisée de nos jours dans les Consoles de Windows. En contrepartie, elle contient moins de caractères de dessin, et cela peut se voir sur des applications consoles qui étaient prévues pour la page de codes 437.
  • La page de code n°1252, utilisée dans les applications Windows graphiques en occident.

Quelle est la différence entre OEM et ANSI ?
auteur : Médinoc
Windows ne garde pas en mémoire une, mais deux "pages de code courantes" : une utilisée dans la console, une pour les applications graphiques.

  • La page de code utilisée pour les consoles est appelée "la page de code OEM courante". Il s'agit généralement, selon la région, de la page 437 ou 850.
  • La page de code utilisée pour les applications graphiques est appelée "la page de code ANSI courante". En Occident, il s'agit généralement de la page de code 1252.

Cette différence se voit généralement quand on tente "naïvement" d'afficher des caractères accentués dans une application console : Visual Studio utilise la page de code ANSI courante, donc les caractères tapés dans le fichier source suivent cette page de code. Sur la console, ils sont affichés avec la page de code OEM, d'où incompatibilité.


Un handle est-il un pointeur ?
auteur : Melem
Un handle est un numéro qui permet d'identifier un objet sous Windows, un pointeur est une variable qui contient une adresse. Un handle n'est donc pas un pointeur. Il n'est pas cependant exclus que dans certains cas, un handle représente effectivement une adresse. Un HINSTANCE par exemple représente l'adresse de base du processus.

En fait, un handle (HANDLE, HISNTANCE, HWND, HICON, etc.) est défini par Windows à l'aide d'un type pointeur, void * par exemple. Cela permet de mieux spécialiser les types au besoin mais ne signifie en aucun cas que handles et pointeurs sont les mêmes.


Qu'est-ce qu'un handle global ?
auteur : Melem
Un handle global est un handle utilisable par tous les processus. Par exemple, lorsqu'une application crée une fenêtre, Windows assigne un handle à cette fenêtre. Ce handle peut être utilisé par toutes les applications pour manipuler cette fenêtre. Un handle de fenêtre est donc global. A l'opposé, quand une application ouvre un fichier par exemple, Windows assigne également un handle à ce fichier mais ce handle n'a de sens que pour l'application qui a ouvert le fichier. Ce handle n'est donc pas global, il est spécifique du processus. En général, les handles globaux sont ceux qui servent à identifier un objet de l'interface utilisateur (comme une fenêtre par exemple) et les handles locaux (appartenant seulement au processus ayant créé l'objet) ceux qui servent à identifier un objet du noyau (fichiers, sockets, processus, threads, etc.).



Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

Les codes sources présentés sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs : - Les contributions de LFE sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de LFE tant que cette note apparaît clairement : "Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement". - Pour ce qui est des autres contributions : Copyright © 2002-2006 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction, ne peux en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.