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.

War es hilfreich?

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“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top