EM_GETLINE

[Résolu]
Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Je dois utiliser le message EM_GETLINE pour récupérrer une ligne d'un Rich Edit.

Pour lParam, la MSDN dit
"Pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line."

Si j'ai bien compris, il s'agit de mettre la taille du tampon dans le premier mot, mais je ne vois pas exactement comment faire (dois-je mettre le poids fort en premier ou en deuxieme?). Par exemple pour une taille de 258 je dois mettre 2 et 1. Lequel à 1 et lequel à 2?
Est-ce qu'un sprintf serait satisfaisant?

Merci

17 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
char szbuff[204];
*((WORD*) szbuff) = 264; // ceci a chaque tour

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c'est quoi le premier word? les 32 premiers bits ou 1 octet ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Me semble avoir deja fait un exemple en reponse a question identique. A verifier.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
264 partout bien entendu....

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
donc les 32 premiers bits
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
WORD c'est 16 bits.
ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Merci
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
16 bits ? word = mot ==> mot processeur = 32bits proco 32bits, j'aurais bien cru, alors dword c'est 32 bits
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
tu as tout compris, sauf que mot = 16 bits, c'est comme ca
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Quand je vous dis que faut faire de l'asm, vous auriez trouve cela normal.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c'est pas les histoires de registre ca, 2*16bits ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
exact !!!
registre 32 se decompose en 2 word et partie basse en 2 bytes.
pas de decomp pour la partie haute, faut un shift.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Je savais qu'un WORD c'était 2 octets
Par contre pour le *((WORD*) szbuff) = 264; c'est vrai que l'asm doit servir, en gros c'est un WORD PTR, c'est ca?
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
cast szbuff en WORD* et defference pour affecter 264
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
pour moi c'est normal, c'est du c, et utiliser sscanf et sprintf c'est antilogique et detourné
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Excusez les mini coupures du site, on fiat des modif au fur et a mesure qu'on constate les defauts.

*((WORD*) szbuff) = 264;
est le genre d'instruction que le compilo va transposer en asm direct:
mov word ptr [szbuff], 264
1 cycle et parallelisable avec suivant ou precedent donc 1/2 en realite.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ok