So che sono pigro qui e dovrei cercare tra i file di intestazione per me stesso, ma quali sono i tipi effettivi per i parametri LPARAM e WPARAM? Sono dei puntatori o quattro byte? Sto facendo un codice di interoperabilità C# e voglio essere sicuro di farlo funzionare su sistemi x64.Quali sono le definizioni per LPARAM e WPARAM?
risposta
LPARAM
è un typedef per LONG_PTR
che è un long
(segno a 32-bit) su Win32 e __int64
(segno a 64 bit) in x86_64.
WPARAM
è un typedef per UINT_PTR
che è un unsigned int
(32 bit senza segno) su Win32 e unsigned __int64
(senza segno a 64 bit) in x86_64.
che è un link MSDN molto utile, grazie –
@Charles Bailey: forse ti sto fraintendendo ma quando dici: "__int64 (firmato a 64 bit) su x86" non intendi "su x86-64" o win64 o qualcosa? Prendo x86 per essere 32-bit. – User
@User: Sì, si supponga di dire x86_64 che è il modo in cui Microsoft fa ora riferimento a amd64. –
LPARAM riferisce ad un LONG_PTR e WPARAM riferisce ad un UINT_PTR
Su x86 essi saranno 4 byte e 64 saranno 8 byte.
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
Quello che vi serve il mio amico è http://www.pinvoke.net/
sì, è un sito utile, anche se le conversioni di interoperabilità di qualità molto mista –
Questi typedef risalgono ai giorni a 16 bit. Originariamente, LPARAM
era un long
(firmato a 32 bit) e WPARAM
era un WORD
(senza segno a 16 bit), quindi lo W and L. A causa della pratica comune di passare i puntatori casted come parametri del messaggio, WPARAM
è stato esteso a 32 bit su Win32 e sia LPARAM
sia WPARAM
sono stati espansi a 64 bit su Win64.
In C#, è necessario utilizzare IntPtr
per LPARAM
e UIntPtr
per WPARAM.
Si noti che nonostante il prefisso LP
, LPARAM
non è un puntatore lontano a un ARAM
.
- 1. Cosa significano LRESULT, WPARAM e LPARAM?
- 2. Quali sono le definizioni delle attività gradle nel linguaggio groovy?
- 3. Quali sono le differenze tra le definizioni dei parametri come (tipo e nome) e (tipo * nome)?
- 4. Quali sono le differenze tra coerenza sequenziale e coerenza quiescente?
- 5. Quali sono le differenze tra $ {} e # {}?
- 6. Quali sono le fortune?
- 7. Quali sono le best practice per CDN?
- 8. Quali sono le specifiche per Motion JPEG?
- 9. Quali sono i limiti o le definizioni dell'ambito dello sviluppo HTML5?
- 10. Quali sono/sono le differenze tra MSBuild e TFSBuild
- 11. Quali sono/sono le principali differenze tra Flink e Storm?
- 12. Quali sono le variabili pure?
- 13. Quali sono le modalità e le opzioni di Ruby File.open?
- 14. Quali sono le differenze tra le classi Helper e Utility?
- 15. recupera WHEEL_DELTA da wParam in WM_MOUSEHWHEEL msg in C#
- 16. Quali sono le differenze tra & e &&, | e || in R?
- 17. Quali sono le buone euristiche per le funzioni di inlining?
- 18. Quali sono le radici di GC per le classi?
- 19. Le definizioni delle variabili sono utilizzate una volta ottimizzate?
- 20. Quali sono le applicazioni pratiche del collegamento debole?
- 21. Quali sono le differenze effettive tra child_process.fork e cluster.fork?
- 22. Quali sono le differenze di utilizzo tra size_t e off_t?
- 23. Quali sono le differenze tra Notifica e pynotify?
- 24. Quali sono le principali differenze tra Babel e TypeScript
- 25. quali sono le differenze tra touchmove e gesticambiare?
- 26. Quali sono le differenze chiave tra Meteor, Ember.js e Backbone.js?
- 27. Quali sono le alternative alle implementazioni OpenSplice e RTI DDS?
- 28. Quali sono le diffrenze tra utf8_general_ci e utf8_unicode_ci?
- 29. Quali sono le differenze tra TFS, SVN e GIT?
- 30. Quali sono le differenze tra OllyDbg e WinDbg?
Si potrebbe semplicemente fare clic destro su 'LAPARAM' e selezionare 'Vai a dichiarazione' ... –
@John - Potrei avere un IDE di Visual C++, ma sto facendo C# dev. Trovare le definizioni attuali di queste cose è fastidiosamente dispendioso in termini di tempo se non si sta lavorando con un IDE C++. Ho dovuto semplicemente seguire manualmente una traccia di diversi typedef per scoprire cosa c'era alla fine di HACMDRIVERID. Se la documentazione MSDN fosse correttamente collegata tramite hyperlink, mi avrebbe risparmiato un sacco di problemi. –
@Mark: Allora perché questa domanda ha segnato C++? –