එක් කාස්ට් එකකින් සාමාන්‍ය දෙයක් ලෙස පෙනෙන ප්‍රොක්සි සැකසුම් සහායකයක් ගෘහ නිර්මාණය මත රඳා පවතින අසාර්ථකත්වයක් බවට පත් කළ හැකිය:

current = (IntPtr)((int)current + optionSize);

එම කේතය ඊළඟ ව්‍යුහයේ ප්‍රමාණය එකතු කිරීමට පෙර ස්වදේශීය ලිපිනය 32-බිට් පූර්ණ සංඛ්‍යාවකට පටු කරයි. 64-බිට් ක්‍රියාවලියකට නොගැළපෙන ලිපින තබා ගත හැකිය. පරිවර්තනය සහ අගය අනුව ප්‍රතිඵලය උපරිප්‍රවාහ ව්‍යතිරේකයක් හෝ අවලංගු ලිපිනයක් විය හැකිය. ගොඩනැගීම නැවත x86 වෙත හැරවීමෙන් දෝෂය සැඟවිය හැකි නමුත් interop ක්‍රියාත්මක කිරීම එම විසඳුම මත රඳා පවතී.

ලිපින පොයින්ටර ප්‍රමාණයේ ස්වරූපයෙන් තබා ගන්න. උදාහරණයක් ලෙස, දැනටමත් වෙන් කළ අරාවක් හරහා ගමන් කිරීමට මෙය භාවිත කළ හැකිය:

IntPtr item = IntPtr.Add(buffer, checked(index * optionSize));

ඕෆ්සෙට් පූර්ණ සංඛ්‍යාවක් ලෙස පවතී; ලිපිනයම එය හරහා තෙරපෙන්නේ නැත. වෙන් කිරීමේ ප්‍රමාණය සහ දර්ශකය තවමත් වලංගු විය යුතුය.

පසුව අවට ප්‍රකාශ සොයා බලන්න

WinINet හි සම්බන්ධතාවයකට වරක් ඇති විකල්පවල DWORD, තන්තු පොයින්ටරයක් සහ FILETIME ඇතුළත් වන ඒකකයක් ඇත. පොයින්ටර ක්ෂේත්‍රවලට IntPtr අවශ්‍ය වේ; DWORD ක්ෂේත්‍ර 32-බිට් ලෙස පවතී. ස්වදේශීය පෙළගැස්ම වැදගත් බැවින් සෑම පූර්ණ සංඛ්‍යාවක්ම 64-බිට් පූර්ණ සංඛ්‍යාවකින් ප්‍රතිස්ථාපනය කිරීම හෝ ඇසුරුම් කළ පිරිසැලසුමක් බලකිරීම නිවැරදි අලුත්වැඩියාවක් නොවේ.

අරාව හරහා යන විට marshaling පසු ව්‍යුහ ප්‍රමාණය භාවිත කරන්න, ANSI හෝ Unicode ප්‍රකාශය ස්ථාවරව ගළපන්න, සහ සෑම වෙන් කිරීමක්ම වෙන වෙනම නිරීක්ෂණය කරන්න. විකල්ප ව්‍යුහවල බ්ලොකය මුදා හැරීමෙන් වෙනත් තැනක වෙන් කළ සහ එම ව්‍යුහ විසින් යොමු කරන තන්තු ස්වයංක්‍රීයව මුදා නොහැරේ.

අවසාන වශයෙන්, සැකසුම්වල විෂය පථය පිළිබඳ ප්‍රශ්නය මතක නිවැරදි බවින් වෙන් කරන්න. කාස්ට් එකක් අලුත්වැඩියා කිරීමෙන් සහායකය විසින් තෝරාගත් WinINet විකල්පය එක් පාලනයකට, එක් ක්‍රියාවලියකට හෝ වර්තමාන පරිශීලකයාගේ සැකසුම්වලට පමණක් බලපාන බව ඔප්පු නොවේ. පැරණි නියැදියේ ඉතිරි කොටස භාර ගැනීමට පෙර එම API හැසිරීම පරීක්ෂා කරන්න. එය නැවුම් කිරීමේ දැනුම්දීම් ද යවන්නේ නම්, අපේක්ෂිත විෂය පථය සඳහා ඒවා තෝරන්න.

අදාළ ලිපි