Udostępnij przez


Unikanie polimorfizmu

Nowe typy danych obejmują dwa typy polimorficzne, INT_PTR i LONG_PTR. W 32-bitowym systemie Windows INT_PTR mapuje na int, a LONG_PTR mapuje na long. W 64-bitowym systemie Windows oba typy są mapowane na typ wbudowany __int64. Kompilator MIDL obsługuje te typy dla zdalnych wywołań procedur, ale istnieje nieodłączne ograniczenie, które należy wziąć pod uwagę podczas korzystania z nich w środowisku rozproszonym. Pamiętaj, aby odpowiednio skomentować kod.

Niezależnie od rozmiaru platformy rozmiar przewodu tych typów polimorficznych jest zawsze 32-bitowy. W przypadku 64-bitowego systemu Windows znak biblioteki czasu wykonywania rozszerza podpisane wartości i przypisuje zero do bajtów o wysokiej kolejności dla niepodpisanej wartości. W przypadku umieszczenia wartości 64-bitowej na przewodzie czas wykonywania obcina bajty o wysokiej kolejności. W związku z tym można używać tylko wartości 32-bitowych o niskiej kolejności.

Używaj typów polimorficznych tylko wtedy, gdy jest to konieczne do przeniesienia. W przypadku nowych interfejsów użyj wewnętrznych typów liczb całkowitych MIDL __int32 i __int64lub użyj typu wskaźnika lub uchwytu kontekstu, w zależności od tego, co najlepiej pasuje do rodzaju przesyłanych danych.

Kompilator 64-bitowy obsługuje nową polimorficzną wewnętrzną __int3264. Ten typ został opracowany, aby wspierać działania związane z przenoszeniem, w tym przypadku w celu przezroczystej obsługi typów UINT_PTR. (Inny element wewnętrzny, __long3264, będzie obsługiwać typ ULONG_PTR). Nie używaj __int3264 bezpośrednio; użyj typu INT_PTR, jeśli potrzebujesz typu polimorficznego ze względów przenoszenia.