En termes simples, une structure "cachée" est une structure pour laquelle vous avez une déclaration mais pas de définition. Dans le cas où une API fournit ce type de structure, cela signifie que vous ne devriez pas avoir à vous soucier de ce à quoi ressemblent les internes de la structure. Vous donner la déclaration fournit suffisamment d'informations pour que vous puissiez créer des pointeurs vers ce type de structure, ce qui est généralement suffisant lorsque vous utilisez l'API associée.
Dans votre cas, le fonctionnement interne de l'API ont probablement une définition qui ressemble à ceci:
struct allegro_bitmap {
/* Insert mystery internals here */
};
#define ALLEGRO_BITMAP struct allegro_bitmap
Quelque part dans l'un des en-têtes que vous, vous avez travaillé seulement une simple déclaration:
struct allegro_bitmap;
#define ALLEGRO_BITMAP struct allegro_bitmap
Il s'agit d'informations suffisantes pour le compilateur et l'éditeur de liens pour générer votre code et le lier à la bibliothèque associée. Pour faire quelque chose d'utile avec le pointeur, vous devez utiliser les fonctions API (puisqu'elles ont la définition complète de la structure).
Le fait que l'intellisense ne montre rien ne signifie pas qu'il est vide. Vous pouvez ne pas avoir le code source dans le projet. – JoshD
Je ne connais pas très bien Visual Studio, mais dans mon utilisation j'ai provisoirement conclu que le fait de déclarer une classe/struct (c'est-à-dire 'struct REAL_ALLEGRO_BITMAP;' sans le corps {...}) inhibe intellisense de cette manière. Je suis sûr que d'autres lecteurs peuvent confirmer/réprimander ... –
Ok, c'est ainsi que c'est fait – jmasterx