Bitta cast oddiy ko'rinadigan proksi sozlamalari yordamchisini arxitekturaga bog'liq nosozlikka aylantirishi mumkin:

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

Bu kod keyingi strukturaning hajmini qo'shishdan oldin mahalliy manzilni 32-bitli butun songa toraytiradi. 64-bitli jarayon sig'maydigan manzillarni saqlashi mumkin. Konvertatsiya va qiymatga qarab natija to'lib ketish istisnosi yoki noto'g'ri manzil bo'lishi mumkin. Buildni x86 ga qaytarish xatoni yashirishi mumkin, lekin interop bajarilishini shu vaqtinchalik yechimga bog'liq qoldiradi.

Manzillarni ko'rsatkich o'lchamida saqlang. Masalan, allaqachon ajratilgan massiv bo'ylab yurish uchun quyidagidan foydalanish mumkin:

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

Ofset butun son bo'lib qoladi; manzilning o'zi u orqali siqilmaydi. Ajratish hajmi va indeks hali ham to'g'ri bo'lishi kerak.

So'ngra atrofdagi deklaratsiyalarni tekshiring

WinINet ning har bir ulanish bo'yicha parametrlari tarkibida DWORD, satr ko'rsatkichi va FILETIME bo'lgan birlashmani o'z ichiga oladi. Ko'rsatkich maydonlariga IntPtr kerak; DWORD maydonlari 32-bitli bo'lib qoladi. Mahalliy tekislash muhim, shuning uchun har bir butun sonni 64-bitli butun son bilan almashtirish yoki o'ralgan tartibni majburlash to'g'ri tuzatish emas.

Massiv bo'ylab yurganda marshalingdan keyingi struktura hajmidan foydalaning, ANSI yoki Unicode deklaratsiyasini izchil moslashtiring va har bir ajratishni alohida kuzatib boring. Parametr strukturalari blokini bo'shatish boshqa joyda ajratilgan va shu strukturalar havola qilgan satrlarni avtomatik bo'shatmaydi.

Nihoyat, sozlamalar qamrovini xotira to'g'riligidan alohida saqlang. Castni tuzatish yordamchi tanlagan WinINet parametri faqat bitta boshqaruv elementiga, bitta jarayonga yoki joriy foydalanuvchi sozlamalariga ta'sir qilishini isbotlamaydi. Eski namuna qolgan qismini qabul qilishdan oldin shu API xatti-harakatini tekshiring. Agar u yangilash bildirishnomalarini ham yuborsa, ularni mo'ljallangan qamrov uchun tanlang.

O'xshash maqolalar