Que pensez vous des handle en C?

Que pensez vous des handle en C? - C - Programmation

Marsh Posté le 23-09-2003 à 10:18:32    

j'ai besoin d'avis:)...

Reply

Marsh Posté le 23-09-2003 à 10:18:32   

Reply

Marsh Posté le 23-09-2003 à 10:34:22    

j'en pense sandwich au fraises
 
(tu veux pas un peu developper ?)

Reply

Marsh Posté le 23-09-2003 à 10:35:41    

clakance de la question.
 
alors vais apporter ma contribution : en win32, un handle c'est un void*, alors ce que j'en pense...
 
si ca réponds pas a la question, ben précise un peu plus les choses...

Reply

Marsh Posté le 23-09-2003 à 11:30:22    

Le cancer:
pour ou contre ?
 
LeGreg

Reply

Marsh Posté le 23-09-2003 à 11:31:51    

y'a t'il une mort apres la vie ?

Reply

Marsh Posté le 23-09-2003 à 11:38:54    

Pour le salon quel papier peint? :o
 
Heu si non une question plus précise ce serait bien ;)


---------------
Le Tyran
Reply

Marsh Posté le 23-09-2003 à 12:06:54    

can you handle it ?

Reply

Marsh Posté le 23-09-2003 à 12:32:30    

Does you or not ?

Reply

Marsh Posté le 23-09-2003 à 12:47:40    

[:drap]
 
quel tomik de qualitay :D


Message édité par Joel F le 23-09-2003 à 12:48:14
Reply

Marsh Posté le 23-09-2003 à 13:00:18    

Ca doit sûrement être cool?


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 23-09-2003 à 13:00:18   

Reply

Marsh Posté le 23-09-2003 à 13:15:53    

faut-il tuer son chef de projet ou non? :o

Reply

Marsh Posté le 23-09-2003 à 13:17:33    

drasche a écrit :

faut-il tuer son chef de projet ou non? :o


 
 :non: C'est le patron qu'il faut tuer?  :D


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 23-09-2003 à 13:19:25    

fodger >> tu es prié de t'expliquer un peu plus, sinon je ferme ton topic ce soir.
 
les autres >> pas la peine de polluer avant de savoir exactement de quoi il retourne... :non:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-09-2003 à 14:20:35    

merci pour la richesse des commentaires :D...
 
Et bien pour développer un peu plus :  
admettons que nous ayons beaucoup de grosses structures...
 
Pour vous y'a t'il un intérêt à utiliser les handle pour travailler avec (genre 1 fonction avec un handle pour variable récupérer le(s) champ(s) qui nous interesse), plutôt que de déclarer directement les variables sur ces mêmes structures?  
 
Je me suis peut être mal exprimé:D...

Reply

Marsh Posté le 23-09-2003 à 14:22:03    

Fodger a écrit :

merci pour la richesse des commentaires :D...
 
Et bien pour développer un peu plus :  
admettons que nous ayons beaucoup de grosses structures...
 
Pour vous y'a t'il un intérêt à utiliser les handle pour travailler avec (genre 1 fonction avec un handle pour variable récupérer le(s) champ(s) qui nous interesse), plutôt que de déclarer directement les variables sur ces mêmes structures?  
 
Je me suis peut être mal exprimé:D...


Ouf, j'ai cru un instant que tu pensais être clair! :pt1cable:

Reply

Marsh Posté le 23-09-2003 à 14:22:06    

Fodger a écrit :

merci pour la richesse des commentaires :D...
 
Et bien pour développer un peu plus :  
admettons que nous ayons beaucoup de grosses structures...
 
Pour vous y'a t'il un intérêt à utiliser les handle pour travailler avec (genre 1 fonction avec un handle pour variable récupérer le(s) champ(s) qui nous interesse), plutôt que de déclarer directement les variables sur ces mêmes structures?  
 
Je me suis peut être mal exprimé:D...


 
 :heink: Et en français ça donne?


---------------
Le Tyran
Reply

Marsh Posté le 23-09-2003 à 14:22:52    

:heink:  
 
Et tes handles, c'est pas des variables peut-être ? :p

Reply

Marsh Posté le 23-09-2003 à 14:24:29    

Fodger a écrit :

merci pour la richesse des commentaires :D...
 
Et bien pour développer un peu plus :  
admettons que nous ayons beaucoup de grosses structures...
 
Pour vous y'a t'il un intérêt à utiliser les handle pour travailler avec (genre 1 fonction avec un handle pour variable récupérer le(s) champ(s) qui nous interesse), plutôt que de déclarer directement les variables sur ces mêmes structures?  
 
Je me suis peut être mal exprimé:D...


 
mmhhh voidrait tu dire passer un pointeur sur une struct plutot que de passer tout les membres de la struct ???
 
 
dans ce cas oui c mieux, c plus facile pour appeler la fonction , puis c uniquement 4bytes a passer aussi  :D

Reply

Marsh Posté le 23-09-2003 à 14:24:59    

jsens que jai encore raconter une connerie

Reply

Marsh Posté le 23-09-2003 à 14:25:08    

:whistle:

Reply

Marsh Posté le 23-09-2003 à 14:25:58    

red faction a écrit :


 
mmhhh voidrait tu dire passer un pointeur sur une struct plutot que de passer tout les membres de la struct ???
 
 
dans ce cas oui c mieux, c plus facile pour appeler la fonction , puis c uniquement 4bytes a passer aussi  :D  


 
En fait ça dépend de l'architecture de la machine si on veut être pointilleux  :whistle: , mais c généralement moin gros qu'une structure ;)


Message édité par LetoII le 23-09-2003 à 14:26:51

---------------
Le Tyran
Reply

Marsh Posté le 23-09-2003 à 14:38:52    

Bon, je vais essayer de formuler une opinion...
L'unique intérêt que je peut voir au Handle est de pouvoir manipuler des données sans rien savoir de ce qu'est réellement ce Handle (pointeur, identifiant...). L'utilisateur ne peut normalement pas utiliser ce Handle en dehors des fonctions que tu as défini. Je vois ça plus comme un moyen de protection qu'autre chose.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 23-09-2003 à 14:42:24    

red faction a écrit :


 
mmhhh voidrait tu dire passer un pointeur sur une struct plutot que de passer tout les membres de la struct ???
 
 
dans ce cas oui c mieux, c plus facile pour appeler la fonction , puis c uniquement 4bytes a passer aussi  :D  


 
oué dans ce genre là:p... donc pour toi ça vaut le coup... parce que j'ai tendance à penser que parfois ça compliquer très rapidement les choses, et occuper plus de place mémoire...

Reply

Marsh Posté le 23-09-2003 à 14:43:35    

gatorette a écrit :

Bon, je vais essayer de formuler une opinion...
L'unique intérêt que je peut voir au Handle est de pouvoir manipuler des données sans rien savoir de ce qu'est réellement ce Handle (pointeur, identifiant...). L'utilisateur ne peut normalement pas utiliser ce Handle en dehors des fonctions que tu as défini. Je vois ça plus comme un moyen de protection qu'autre chose.


 
là tout à fait d'accord...

Reply

Marsh Posté le 23-09-2003 à 14:46:47    

Fodger a écrit :


 
oué dans ce genre là:p... donc pour toi ça vaut le coup... parce que j'ai tendance à penser que parfois ça compliquer très rapidement les choses, et occuper plus de place mémoire...


 
par exemple pour netbios (bon je c complement depassé et plus personne nutilise ca) il ya une 20aine de parametres a passer :
 
on remplit la structure puis on la passe a la fonction tout simplement
 
jvois mal : Netbios (param1 ,param2, param3 , ... , param 23,..)

Reply

Marsh Posté le 23-09-2003 à 14:50:23    

red faction a écrit :


 
par exemple pour netbios (bon je c complement depassé et plus personne nutilise ca) il ya une 20aine de parametres a passer :
 
on remplit la structure puis on la passe a la fonction tout simplement
 
jvois mal : Netbios (param1 ,param2, param3 , ... , param 23,..)


 
La structure directement, pas un handle?

Reply

Marsh Posté le 23-09-2003 à 15:10:56    

Fodger a écrit :


 
La structure directement, pas un handle?


 
un pointeur sur struct

Reply

Marsh Posté le 24-09-2003 à 01:42:56    

gatorette a écrit :

Bon, je vais essayer de formuler une opinion...
L'unique intérêt que je peut voir au Handle est de pouvoir manipuler des données sans rien savoir de ce qu'est réellement ce Handle (pointeur, identifiant...). L'utilisateur ne peut normalement pas utiliser ce Handle en dehors des fonctions que tu as défini. Je vois ça plus comme un moyen de protection qu'autre chose.


 
protection contre quoi?


---------------
You have the right to remain silent. You are warned that anything you say can will be taken down used as evidence against you///Il n'y a pas de théorie de l'évolution. Juste une liste d'espèces que Chuck Norris autorise à survivre.
Reply

Marsh Posté le 24-09-2003 à 11:15:16    

[img]

Angel_Dooglas a écrit :

protection contre quoi?


 
Protection contre une mauvaise utilisation.
 
Par exemple, si je crée une bibliothèque permettant de gérer des images. J'imagine que je stocke mes images dans une structure avec la largeur, la hauteur, le nombre de bits par pixel et enfin un pointeur vers une zone mémoire contenant l'image brute. Je propose également des fonctions permettant de modifier l'image (rotation, recadrage...). Pour que ces fonctions puissent fonctionner, il faut qu'elles sachent sur quelle image elles doivent agir.
Donc soit je laisse tout transparent et je demande à l'utilisateur de me passer un pointeur vers la structure image, soit je demande handle et ma fonction pourra aller chercher ces informations elle-même.
Le problème avec la première solution est que l'utilisateur de ma bibliothèque a accès à toutes les informations sur mon image. Si il souhaite modifier la largeur de l'image, il peut le faire et donc faire planter toutes mes fonctions après. Par contre, avec un handle, la façon dont sont gérées les images reste opaque. Il ne peut donc pas modifier ma structure et tout faire planter.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-09-2003 à 14:15:50    

Bref, ça s'appelle l'encapsulation. Un des concepts fondamentaux de la programmation objet... et un des moyens les plus puissants qu'on ait trouvé pour réduire statistiquement le nombre de bugs d'un programme.

Reply

Marsh Posté le 24-09-2003 à 14:20:23    

BifaceMcLeOD a écrit :

Bref, ça s'appelle l'encapsulation. Un des concepts fondamentaux de la programmation objet... et un des moyens les plus puissants qu'on ait trouvé pour réduire statistiquement le nombre de bugs d'un programme.

ben non, les handles, c'est des types opaques, on ne sait pas ce que c'est, on sait juste à quoi ça sert, ce qui est quand même différent je pense

Reply

Marsh Posté le 27-09-2003 à 19:01:15    

gatorette a écrit :

[img]
 
Protection contre une mauvaise utilisation.
 
Par exemple, si je crée une bibliothèque permettant de gérer des images. J'imagine que je stocke mes images dans une structure avec la largeur, la hauteur, le nombre de bits par pixel et enfin un pointeur vers une zone mémoire contenant l'image brute. Je propose également des fonctions permettant de modifier l'image (rotation, recadrage...). Pour que ces fonctions puissent fonctionner, il faut qu'elles sachent sur quelle image elles doivent agir.
Donc soit je laisse tout transparent et je demande à l'utilisateur de me passer un pointeur vers la structure image, soit je demande handle et ma fonction pourra aller chercher ces informations elle-même.
Le problème avec la première solution est que l'utilisateur de ma bibliothèque a accès à toutes les informations sur mon image. Si il souhaite modifier la largeur de l'image, il peut le faire et donc faire planter toutes mes fonctions après. Par contre, avec un handle, la façon dont sont gérées les images reste opaque. Il ne peut donc pas modifier ma structure et tout faire planter.


 
Merci, c'est effectivement de l'encapsulation, je ne savais pas que cela existait de maniere aussi "evoluee" en C.


---------------
You have the right to remain silent. You are warned that anything you say can will be taken down used as evidence against you///Il n'y a pas de théorie de l'évolution. Juste une liste d'espèces que Chuck Norris autorise à survivre.
Reply

Marsh Posté le 27-09-2003 à 20:16:50    

BifaceMcLeOD a écrit :

Bref, ça s'appelle l'encapsulation. Un des concepts fondamentaux de la programmation objet... et un des moyens les plus puissants qu'on ait trouvé pour réduire statistiquement le nombre de bugs d'un programme.


 
un des moyens les plus puissants pour réduire les bug se sont plutôt suivre des méthodes de travail telle qu'on en retrouve dans des normes ieee, rup, iso...


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 27-09-2003 à 22:55:37    

Fodger a écrit :

merci pour la richesse des commentaires :D...
 
Et bien pour développer un peu plus :  
admettons que nous ayons beaucoup de grosses structures...
 
Pour vous y'a t'il un intérêt à utiliser les handle pour travailler avec (genre 1 fonction avec un handle pour variable récupérer le(s) champ(s) qui nous interesse), plutôt que de déclarer directement les variables sur ces mêmes structures?  
 
Je me suis peut être mal exprimé:D...

Non c'est naze. On utilise ça uniquement si on veut pas que le dev puisse toucher aux structures ou si il est impossible de prendre un pointeur dessus (style la structure est en espace noyau, comme dans le cas des fichiers, ou quand elle est physiquement sur une autre machine).
 
En plus ça rajoute des indirections inutiles que le compilo ne saura pas virer. Et ça n'apporte strictement rien à part de la complexité.

Reply

Marsh Posté le 28-09-2003 à 00:20:40    

Les handles permettent d'obliger le programmeur à passer par l'interface de ton choix et lui interdisent de procéder autrement (routines maisons...). 2 avantages principaux. Le premier a été dit : la sécurité. En empêchant le programmeur de modifier directement les objets on est assuré qu'ils sont toujours valides. Qui plus est on peut contrôler leur utilisation (droits...).
Le 2° avantage est l'évolutivité : le code client n'est pas lié à une implémentation particulière des ojets manipulés. Tu peux alors en interne totalement modifier tes structures. Il te suffit de conserver la même interface pour rester compatible avec le code existant.
http://coding.bug.free.fr/win/hobj.htm
 
PS : c'est pas lié au langage C


Message édité par HelloWorld le 28-09-2003 à 00:21:56

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-09-2003 à 00:24:12    

HelloWorld a écrit :

Les handles permettent d'obliger le programmeur à passer par l'interface de ton choix et lui interdisent de procéder autrement (routines maisons...). 2 avantages principaux. Le premier a été dit : la sécurité. En empêchant le programmeur de modifier directement les objets on est assuré qu'ils sont toujours valides. Qui plus est on peut contrôler leur utilisation (droits...).
Le 2° avantage est l'évolutivité : le code client n'est pas lié à une implémentation particulière des ojets manipulés. Tu peux alors en interne totalement modifier tes structures. Il te suffit de conserver la même interface pour rester compatible avec le code existant.
http://coding.bug.free.fr/win/hobj.htm

On s'en fout de ça, on met des pointeurs, on documente pas la structure et on met des accesseurs et on la la même chose en version plus rapide.

Reply

Marsh Posté le 28-09-2003 à 00:28:16    

AMHA tu décris une manière d'implémenter le mécanisme à partir de pointeurs. Il me semble que Win9x calcules les handles à partir des pointeurs "XORé" avec un obfuscator.
Le problème du undocumented c'est que des bidouilleur vont le documenter et les routines maisons vont voir le jour.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-09-2003 à 00:46:42    

HelloWorld a écrit :


Le problème du undocumented c'est que des bidouilleur vont le documenter et les routines maisons vont voir le jour.

ça on s'en fout, si c'est dans le même espace mémoire, c'est de toutes façons accessible, obfuscation à la con ou pas, à coup de debugger, c'est vite réglé.  
 
L'unique moyen de protéger une structure est de la sortir de l'espace mémoire du process (ce que fait le noyau par ex, en gardant les données sensibles associées au process dans son espace) auquel cas, une référence abstraite est l'unique moyen de savoir de quoi on parle dans les fonctions.

Reply

Marsh Posté le 02-10-2003 à 12:39:42    

nraynaud a écrit :

On s'en fout de ça, on met des pointeurs, on documente pas la structure et on met des accesseurs et on la la même chose en version plus rapide.


Le problème, c'est qu'en C, pour pouvoir définir le pointeur sur structure, tu es obligé de définir la structure préalablement. Donc comme la définition du type pointeur est public, la définition de la structure est nécessairement publique, dans le .h aussi.
 
Autre solution, tu écris 2 .h, un public et un privé, le .h public définit une structure bidon -- sauf s'il est inclus par le .h privé -- et le .h privé définit la structure véritable. Du coup, l'utilisateur manipule quelque chose qui est en fait un pointeur sur la véritable structure de données, mais cette dernière lui est masquée. Donc pas d'indirection.
 
Mais par définition, ce que manipule l'utilisateur dans ce cas, ça s'appelle quand même un handle.  
 

Reply

Marsh Posté le 02-10-2003 à 13:26:20    

Citation :

Le problème, c'est qu'en C, pour pouvoir définir le pointeur sur structure, tu es obligé de définir la structure préalablement. Donc comme la définition du type pointeur est public, la définition de la structure est nécessairement publique, dans le .h aussi.


 
Non, ou alors j'ai mal compris.
Une déclaration suffit, la définition vient dans le .c.
C'est même une encapsulation plus forte qu'en C++
 

Code :
  1. /* .h */
  2. struct Object;
  3. void InitObject( struct Object * o );
  4. /* .c */
  5. struct Object
  6. {
  7.     int var1;
  8.     int var2;
  9. };
  10. void InitObject( struct Object * o )
  11. {
  12.     o->var1 = 0;
  13.     o->var1 = 0;
  14. }


Message édité par HelloWorld le 02-10-2003 à 13:27:01

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed