MSDN indica che la funzione RegisterWindowMessage() viene utilizzata solo per la registrazione dei messaggi da inviare tra i processi. Se un messaggio è necessario per l'invio all'interno di un processo, può essere selezionato in modo sicuro nell'intervallo da WM_APP a 0xBFFF.L'abusare di RegisterWindowMessage può portare all'esaurimento delle risorse?
Tuttavia nel nostro codebase spesso vedo che RegisterWindowMessage() viene utilizzato per i messaggi inviati solo all'interno di un processo. Suppongo che ciò sia avvenuto grazie alla semplicità percepita dell'uso di RegisterWindowMessage() poiché non richiede la distribuzione manuale degli identificatori di messaggio nell'intervallo WM_APP..0xBFFF.
Ho capito correttamente che se molte applicazioni sono eseguite su una macchina e chiamano tutte RegisterWindowMessage() con stringhe diverse, potrebbero esaurire la gamma di identificatori di messaggi consentiti per il reso da RegisterWindowMessage() e per alcuni di essi sarà solo restituire un valore che indica un errore? Quale potrebbe essere un motivo valido per l'utilizzo dei messaggi RegisterWindowMessage() nei casi in cui i messaggi dell'intervallo WM_APP..0xBFFF sarebbero sufficienti?
non sapeva di quel bug in C++ Builder/Delphi! Nasty ... –
C++ Builder/Delphi (VCL) genera il nome del messaggio da 'HInstance' (' GetModuleHandle') e ID thread.Per quanto riguarda il normale eseguibile, 'HInstance' non varia e la gamma di ID thread è limitata, è improbabile che l'applicazione VCL esaurisca la tabella atom. Più plausibile è nel caso della DLL integrata in VCL. O quando il file eseguibile ha impostato ASLR (che è un requisito per la certificazione di Windows 8). –