Vermeiden von Polymorphie

Die neuen Datentypen umfassen zwei polymorphe Typen: INT _ PTR und LONG _ PTR. Auf 32-Bit-Windows wird die INT _ PTR int und die LONG _ PTR long-Zuordnungen zu . Auf 64-Bit-Windows werden beide Typen dem _ _ systeminternen Int64-Typ zuordnen. Der MIDL-Compiler unterstützt diese Typen für Remoteprozeduraufrufe, aber es gibt eine inhärente Einschränkung, die Sie berücksichtigen müssen, wenn Sie sie in einer verteilten Umgebung verwenden. Kommentieren Sie Ihren Code unbedingt entsprechend.

Unabhängig von der Plattformgröße beträgt die Kabelgröße dieser polymorphen Typen immer 32 Bits. Beim Unmarshaling auf 64-Bit-Windows erweitert das Laufzeitbibliothekszeichen signierte Werte und weist 0 (null) den hohen Bytes für einen Wert ohne Vorzeichen zu. Wenn sie einen 64-Bit-Wert auf dem Kabel setzen, schneide die Laufzeit die hohen Bytes ab. Daher können nur die niedrigen 32-Bit-Werte verwendet werden.

Verwenden Sie die polymorphen Typen nur, wenn dies zum Portieren erforderlich ist. Verwenden Sie für neue Schnittstellen die systeminternen MIDL-Ganzzahltypen _ _ int32 und _ _ int64, oder verwenden Sie einen Zeigertyp oder ein Kontexthandle, was für die Art der übertragenen Daten am besten geeignet ist.

Der 64-Bit-Compiler unterstützt ein neues polymorphes systeminternes _ _ int3264. Auch hier wurde dieser Typ entwickelt, um Portierungsbemühungen zu unterstützen, in diesem Fall, um die UINT _ PTR-Typen transparent zu unterstützen. (Ein weiteres _ _ systeminternes , long3264, unterstützt den ULONG _ PTR-Typ.) Verwenden Sie _ _ int3264 nicht direkt. Verwenden Sie den INT _ PTR-Typ, wenn Sie aus Portierungsgründen einen polymorphen Typ benötigen.