Dela via


Att undvika polymorfism

De nya datatyperna innehåller två polymorfa typer, INT_PTR och LONG_PTR. I 32-bitars Windows motsvarar INT_PTRint och LONG_PTR motsvarar long. I 64-bitars Windows mappas båda typerna till den __int64 inbyggda typen. MIDL-kompilatorn stöder dessa typer för fjärrproceduranrop, men det finns en inbyggd begränsning som du måste tänka på när du använder dem i en distribuerad miljö. Se till att kommentera koden i enlighet med detta.

Oavsett plattformsstorlek är trådstorleken för dessa polymorfa typer alltid 32 bitar. Vid avkodning i ett 64-bitars Windows-system utökar körbiblioteket tecknet för signerade värden och tilldelar noll till de högre ordningsbyten för osignerade värden. När du sätter ett 64-bitarsvärde på kabeln trunkerar körtiden de högre ordningsbytena. Därför kan endast 32-bitarsvärden i låg ordning användas.

Använd endast de polymorfa typerna när det behövs för portning. För nya gränssnitt använder du de inbyggda MIDL-heltalstyperna __int32 och __int64, eller använder en pekartyp eller kontextreferens, beroende på vilket som är lämpligast för den typ av data som överförs.

64-bitars kompilatorn stöder en ny polymorf inbyggd __int3264. Återigen utvecklades denna datatyp för att stödja portningsinsatser, i detta fall för att transparent stödja UINT_PTR datatyper. (En annan inbyggd, __long3264, kommer att stödja ULONG_PTR typen.) Använd inte __int3264 direkt; använd INT_PTR typ när du behöver en polymorf typ för portningsändamål.