بىر قېتىملىق cast ئادەتتىك كۆرۈنگەن ۋاكالەتچى تەڭشەك ياردەمچىسىنى قۇرۇلما ئاساسىغا باغلىق خاتالىققا ئايلاندۇرالايدۇ:

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 بايانىنى ئىزچىل ماسلاشتۇرۇڭ ۋە ھەر ئاجرىتىشنى ئايرىم كۆزىتىڭ. تاللانما قۇرۇلمىلىرىنىڭ بۆلىكىنى قويۇپ بېرىش باشقا جايدا ئاجرىتىلغان ۋە شۇ قۇرۇلمىلار ئىشارە قىلغان تىزىقلارنى ئاپتوماتىك قويۇپ بەرمەيدۇ.

ئاخىرىدا، تەڭشەك دائىرىسى مەسىلىسىنى ئەسلىمە توغرىلىقىدىن ئايرىڭ. cast نى رېمونت قىلىش ياردەمچى تاللىغان WinINet تاللانمىسىنىڭ پەقەت بىر كونترول، بىر جەريان ياكى نۆۋەتتىكى ئىشلەتكۈچىنىڭ تەڭشەكلىرىگە تەسىر كۆرسىتىشىنى ئىسپاتلىمايدۇ. كونا ئۈلگىنىڭ قالغان قىسمىنى قوبۇل قىلىشتىن بۇرۇن شۇ API ھەرىكىتىنى تەكشۈرۈڭ. ئەگەر ئۇ يېڭىلاش ئۇقتۇرۇشلىرىنىمۇ ئەۋەتسە، ئۇلارنى مەقسەت قىلىنغان دائىرە ئۈچۈن تاللاڭ.

مۇناسىۋەتلىك ماقالىلەر