MSDN afferma:
versioni
64-bit di Windows a 32 bit utilizzano maniglie per l'interoperabilità. Quando si condivide un handle tra applicazioni a 32 bit e 64 bit, solo i 32 bit inferiori a sono significativi, quindi è sicuro troncare il handle (quando lo si passa da 64 a 32 bit) o firmare l'estensione il manico (quando lo si passa da 32-bit a 64-bit). Le maniglie che possono essere condivise includono gli handle per gli oggetti utente come HWND, gli handle per gli oggetti GDI come penne e pennelli (HBRUSH e HPEN) e le maniglie per oggetti denominati come mutex, semafori e handle di file.
È anche interessante notare questo commento aggiunto su quella pagina:
Il modo corretto per condividere tali maniglie di tutti i limiti di processo è di estendono a zero 32 bit maniglie a 64 bit, o viceversa di troncamento 64 bit gestisce a 32 bit scartando i bit superiori.
Si noti la distinzione tra "estendere il segno" un handle rispetto a "estendere zero" un handle.
Edit: A giudicare dalla discussione visto in una risposta cancellato a questa domanda, suppongo che il significato del segno-estensione di una maniglia a 32 bit per arrivare a un 64-bit gestire invece di zero-estendendolo è quello di mantenere un trattamento adeguato del valore INVALID_HANDLE_VALUE per un handle.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384203%28v=vs.85%29.aspx
_perché_ fare il necessario per memorizzare un 'ansa di in un' int'? Sembra problematico. Si consideri un 'std :: map'. –
MSalters
@MSalters Questo è correlato ai descrittori di file POSIX (che sono 'int'). Sto usando C, quindi nessun STL, ma sì, potrei creare un secondo sistema di handle che punta a un 'HANDLE' di Windows, ma sarebbe più lento di un cast semplice, quindi sono qui a chiedere. – thelink2012