Blog gunsmoker (traduceri) ceea ce literele w și l spun în wparam și lparam

Odată, Windows a fost de 16 biți. Fiecare mesaj poate conține două fragmente de date, denumite WPARAM și LPARAM.
Primul parametru este de 16 biți pentru Windows a fost de 16-biți valoare ( „cuvânt“, „cuvânt“), așa că a fost numit W. Al doilea pe 32 de biți ( „lung“, „lung“), așa că se numește L.

Parametrul W a fost utilizat pentru transferul de numere și descriptori, iar parametrul L pentru transferul indicatorilor.

Când Windows a devenit 32-bit, parametrul WPARAM a crescut la valoarea de 32 de biți. Prin urmare, deși „W“ și înseamnă „cuvântul“ ( „cuvânt“), dar acum nu mai este cuvântul (și în Windows 64-bit, ambele opțiuni devin, în general, pe 64 de biți!).

Este util să înțelegeți originea acestui termen. Dacă te uiți la proiectarea mesajelor fereastra, atunci veți vedea următoarele: dacă mesajul ia un pointer, acest indicator este de obicei trecut la lParam. Și dacă mesajul are un descriptor sau doar un număr, atunci acesta este transmis către WPARAM. Dacă mesajul primește ambii parametri, întregul merge la WPARAM, iar pointerul către LPARAM.

Înțelegerea acestui fapt vă va permite să memorați mai ușor parametrii pentru mesajele de ferestre. Dimpotrivă, dacă regula este întreruptă de un mesaj, creierul tău va reacționa imediat: "Nu, este ceva în neregulă aici".

Momentul a rămas neschimbat)

De exemplu, coroborat Delphi XE (x32) și Win 7 prototipuri funcționale (x64) trebuie să aibă în continuare parametrii wParam / lParam bitul 32. Prototipurile sunt de obicei definite ca fiind recomandate
Proc (WParam, lParam: LongInt).
poate că ar fi mai prudent să scrii
Proc (WParam: WPARAM; lParam: LPARAM).
ca asigurare pentru trecerea la un compilator pe 64 de biți. Se pare că LongInt trebuie să se potrivească cu adâncimea de biți a compilatorului, dar.

Alexander, am dreptate?

Ei bine, evident, Windows.pas va fi fixat în x64. Deoarece, într-adevăr, este acum declarat ca LongInt, dar în realitate trebuie să existe un tip de virgulă mobilă - WPARAM și LPARAM.

Dar asta este în Delphi. Și, de exemplu, în capul Jedi, toate tipurile sunt deja specificate exact, așa cum este, unu-la-unu.

Se pare că acum Win x64 încă transmite pe 32 de biți (în loc pentru sistemele pe 64 de biți nativ), cu ajutorul unor metode de virtualizare pentru noi?

Vorbim acum despre ce aplicații: 32 sau 64 biți?

Aplicațiile pe 64 de biți, desigur, utilizează argumente de 8 octeți. Orice aplicație trebuie recompilată pentru a deveni 64 de biți. În acest moment (timpul de reconstrucție), parametrii de 4 octeți se modifică la 8 octeți.

Aplicațiile pe 32 de biți, desigur, utilizează argumente de 4 octeți. Cum pot utiliza 8 octeți dacă au fost compilați cu 4 octeți? Din faptul că rulați o aplicație de 32 de octeți într-un mediu pe 64 de biți, aceasta nu va fi refăcută magic (recompilată) ca mediu de 64 de biți și va utiliza argumente de 8 octeți. Aceasta trebuie înțeleasă. Acesta va rămâne la fel cum a fost (vorbim despre Nativ, nu despre .NET).

La urma urmei, indicatorii pentru o aplicație pe 32 de biți vor fi de 4 octeți chiar și pe un sistem pe 64 de biți.

În mediul pe 32 de biți pe 64 de biți, toate aplicațiile sunt rulate în modul de emulare prin mecanismul WOW64 (Windows-on-Windows) - aproximativ la fel ca 95-lea an al tuturor rulează aplicații pe 16 biți în modul de emulare sistem WOW32 32 biți.