Wie kann ich HWND zwischen 32 und 64-Bit-Anwendungen in Win x64 teilen?
Frage
MSDN sagt mir, die Fenster (HWND) Griffe können zwischen 32- und 64-Bit-Anwendungen, in Interprocess Communication (MSDN). Jedoch in Win32 ein HWND 32 Bits, wohingegen in 64-Bit-Windows-es 64 Bits. Wie also können die Griffe geteilt werden?
Ich denke, die gleiche Frage Griff benannte Objekte wie mutexes gilt, Semaphore und Datei-Handles.
Lösung
nicht die Tatsache, dass sie bedeutet, gemeinsam genutzt werden können, dass nur die unteren 32 Bits in Win64 Prozessen verwendet werden? Windows-Griffe sind Indizes keine Zeiger, zumindest soweit ich das beurteilen kann, es sei denn, MS wollte mehr als 2 ^ 32 Fenster / file / Mutex / etc ermöglichen. Griffe gibt keinen Grund, die hohen 32 Bits eines void*
auf Win64 zu verwenden.
Andere Tipps
Wie Daniel Rose oben weist darauf hin, die MSDN-Dokumentation jetzt heißt es :
... es sicher ist, den Griff trunkieren oder vorzeichenerweitert den Griff (wenn es von 64-Bit auf 32-Bit-Übergang) (wenn es von 32-Bit auf 64-Bit-Übergang).
Es scheint immer noch einige Verwirrung, hier zu sein, da mir gesagt wurde, Null-Erweiterung durch einen WOW64 dev der richtige Weg ist. Wenn Sie eine 64-Bit-Modul schreiben, die Griffe von 32-Bit-Module erhält, könnte die sicherste Wette nur die unteren 32 Bits des Griffs (das heißt truncate) vergleichen sein. Andernfalls können Sie auf einem Schild-Erweiterung vs Nullerweiterung Differenz ertappt.
Vor kurzem erhielt ich eine E-Mail von einem Microsoft WOW64-Entwickler, der bestätigt:
Die Griffe sind 32bit und sicher abgeschnitten / Null verlängert. Es ist für beide Kernel-Objekt Griffe und USER true / GDI-Handles.
Haben Sie einen Blick in Microsoft Interface Definition Language (MIDL) Porting Guide, Seite 12 (Http://msdn.microsoft.com/en-us/library/ms810720.aspx)
haben hier einen Blick ar USER und GDI-Handles sind Zeichen 32b Werte erweitert
Ich glaube, du hast Recht im Allgemeinen vorsichtig zu sein. MSDN behauptet jedoch, dass sie gemeinsam genutzt werden kann, ist ein Vertrag für uns Programmierer. Sie können auch nicht sagen, „teilen Sie es heute“ und dann „nicht mehr“ morgen, ohne viel Software zu brechen.
Auch für x64 und 32-Bit-Software gleichzeitig auf einer bestimmten Maschine zu laufen, und für jeden etwas dabei, miteinander auszukommen, HWNDs (und viele Griffe) müssen weiterhin 32-Bit und kompatibel sein.
Ich denke, was ich sagen will ist, dass ich denke, das ist eine sehr sichere Wette ist, zumindest für die Lebensdauer von Windows 7, und wahrscheinlich von Windows „weiter“.