Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008
-
26 août 2006 à 02:18
Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008
-
26 août 2006 à 14:47
Bonjour,
je viens d'un peu chercher après des sources pour gérer le presse-papier et j'en ai trouvé une de BruNews. Bien faite, comme d'hab et je comprend quasi tout sauf deux API. L'un était l'inverse de l'autre :
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 26 août 2006 à 04:26
Salut,
Dans cet exemple, le premier paramètre de GlobalAlloc() est GHND. C'est un attribut qui combine deux autres : GMEM_MOVEABLE et GMEM_ZEROINIT. Le premier attribut indique que la zone mémoire allouée peut être déplacée. Le deuxième sert à mettre à zéro tous les octets de cette zone. Quand la zone est déplaçable, la fonction retourne un handle HGLOBAL sur l'objet mémoire. Ce handle doit être transformé en pointeur sur la zone allouée. C'est le rôle de la fonction GlobalLock(). Elle sert aussi à empêcher la zone d'être déplacée pendant son utilisation. GlobalUnlock() fait l'opération inverse en autorisant à nouveau le déplacement.
Il est à noter qu'on n'a pas besoin d'utiliser GlobalLock() ni GlobalUnlock() si on appelle GlobalAlloc() avec l'attribut GMEM_FIXED ou GPTR. Dans ce cas la zone mémoire est fixe et la fonction retourne directement un pointeur sur le premier octet de cette zone.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 26 août 2006 à 13:30
Non car dans la fonction SetClipboardData, il est spécifié que la mémoire doit être alloué en moveable:
"If the hMem parameter identifies a memory object, the object must have been allocated using the function with the GMEM_MOVEABLE flag"
Sinon ca aurait été possible en effet
Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008 26 août 2006 à 14:15
Ah donc si j'ai bien compris, dans l'exemple, on crée un segment de mémoire moveable, puis on le bloque pour donner une adresse au pointeur char et ensuite on le débloque pour pouvoir le passer à la fonction SetClipboardData ?
Je sais que je repete +/- la meme chose que vous mais c'est pour voir si j'ai bien compris :p