Obligement - L'Amiga au maximum

Mardi 03 juin 2025 - 15:39  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : C - application de la programmation orientée objet aux gadgets
(Article écrit par Batchman et extrait d'A-News (Amiga News) - avril 1989)


Comme promis le mois dernier, voici un petit exemple de programmation orientée objet. Ceux qui connaissent déjà ne seront pas très impressionnés mais ce n'est qu'un tout petit exemple de ce que l'on peut faire.

Le sujet de l'article étant les gadgets, voyons en quoi elle nous facilite la vie. Lorsqu'un gadget est activé par l'utilisateur, un message est envoyé à la fenêtre qui le contient. Le problème est de savoir de la façon la plus simple possible quel gadget est activé.

Dans le dernier exemple (du mois de décembre), on récupérait le numéro du gadget émetteur et, par un "switch/case", on déterminait l'action à exécuter.

La ruse de sioux consiste à placer dans le champ "UserData" de la structure "Gadget" l'adresse de la fonction à exécuter. De cette manière, on n'aura plus besoin de savoir quel est le gadget activé pour appeler la fonction correspondante ; on appellera directement la fonction dont l'adresse est située dans le champ "UserData". Si vous n'êtes pas convaincu, comparez le programme d'exemple avec celui du moi de décembre. C'est tout de même plus simple !

Votre compilateur (j'ai utilisé le Lattice 4.0) risque cependant de protester par un "warning". Méprisez donc cet esprit de contradiction : le programme est correct (au passage, si un lecteur éclairé trouve la conversion de type nécessaire pour éliminer ce warning, il gagnera... toute mon admiration). Maintenant, tapez le listing et essayez-le.

C
C

Mise à jour (août 1989)

Il y a donc deux lignes sur lesquelles bute le compilateur, qui rend un "warning" (alerte). Attention, ça devient compliqué : il s'agit de récupérer, à partir d'un pointeur sur un message, l'adresse d'un gadget contenant un pointeur sur une fonction retournant un entier. Ces lignes sont :

f=((struct Gadget *) Message->IAdress)->UserData;
fin=(*f)();

Avec l'aide de plusieurs lecteurs d'A-News, que je remercie au passage, voici ce qu'il fallait écrire :

fin=(*((int(*)())((struct Gadget *) Message->IAdress)->UserData))();

Il n'y a plus besoin du pointeur f qui servait d'intermédiaire. "fin" reçoit directement l'entier retourné par la fonction dont l'adresse est dans le gadget activé et dont adresse (du gadget) se trouve dans le message... Je ne vois vraiment pas où est la difficulté... Que les nouveaux venus au C ne se découragent pas, cet exemple de conversion explicite de type est un cas extrême (mais on peut faire pire, il n'y a pas de limites).


[Retour en haut] / [Retour aux articles] [Article précédent]