یو کاسټ کولی شي یو عادي ښکاره د پروکسي تنظیماتو مرستندوی په معماري پورې تړلې ناکامۍ بدل کړي:

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 چلند وګورئ. که دا د تازه کولو خبرتیاوې هم واستوي، دغه د پام وړ حد لپاره وټاکئ.

اړوندې مقالې