এটা কাষ্টে आपातদৃষ্টিত সাধাৰণ প্ৰক্সি-ছেটিংছ সহায়ক এটাক আৰ্কিটেকচাৰ-নিৰ্ভৰ বিফলতালৈ ৰূপান্তৰ কৰিব পাৰে:

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

সেই ক'ডে পৰৱৰ্তী গঠনৰ আকাৰ যোগ কৰাৰ আগতে এটা নেটিভ ঠিকনা 32-বিট পূৰ্ণসংখ্যালৈ সংকুচিত কৰে। 64-বিট প্ৰক্ৰিয়াই নধৰা ঠিকনা ধৰি ৰাখিব পাৰে। ৰূপান্তৰ আৰু মানৰ ওপৰত নিৰ্ভৰ কৰি ফলাফলটো অভাৰফ্ল' ব্যতিক্ৰম বা অবৈধ ঠিকনা হ'ব পাৰে। বিল্ডটো x86 লৈ ঘূৰাই দিলে ভুলটো লুকুৱাব পাৰে, কিন্তু interop ৰূপায়ণটো সেই কাম-চলাও সমাধানৰ ওপৰত নিৰ্ভৰশীল হৈয়ে থাকে।

ঠিকনাসমূহ পইণ্টাৰ-আকাৰত ৰাখক। উদাহৰণস্বৰূপে, ইতিমধ্যে আবণ্টন কৰা এটা এৰেত মাজেৰে আগবাঢ়িবলৈ এইটো ব্যৱহাৰ কৰিব পাৰি:

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

অফছেটটো পূৰ্ণসংখ্যা হৈয়ে থাকে; ঠিকনাটো নিজে এটাৰ মাজেৰে চেপি যোৱা নাই। আবণ্টনৰ আকাৰ আৰু সূচকাংক এতিয়াও বৈধ হ'ব লাগিব।

তাৰ পিছত চাৰিওফালৰ ঘোষণাসমূহ পৰীক্ষা কৰক

WinINet-ৰ প্ৰতি-সংযোগ বিকল্পসমূহত এটা union আছে যাৰ সদস্যসমূহত DWORD, এটা ষ্ট্ৰিং পইণ্টাৰ আৰু FILETIME থাকে। পইণ্টাৰ ক্ষেত্ৰত IntPtr প্ৰয়োজন; DWORD ক্ষেত্ৰ 32-বিট হৈয়ে থাকে। নেটিভ সংৰেখন গুৰুত্বপূৰ্ণ, সেয়ে প্ৰতিটো পূৰ্ণসংখ্যাক 64-বিট পূৰ্ণসংখ্যাৰে সলনি কৰা বা পেকড বিন্যাস বল প্ৰয়োগ কৰা সুস্থ মেৰামতি নহয়।

এৰেত মাজেৰে আগবাঢ়োঁতে marshaled গঠনৰ আকাৰ ব্যৱহাৰ কৰক, ANSI বা Unicode ঘোষণা সাংগতিকভাৱে মিলাওক, আৰু প্ৰতিটো আবণ্টন সুকীয়াকৈ অনুসৰণ কৰক। বিকল্প গঠনসমূহৰ ব্লক মুক্ত কৰিলে আন ঠাইত আবণ্টন কৰা আৰু সেই গঠনসমূহে উল্লেখ কৰা ষ্ট্ৰিংসমূহ স্বয়ংক্ৰিয়ভাৱে মুক্ত নহয়।

শেষত, ছেটিংছৰ পৰিসৰৰ প্ৰশ্নটো মেমৰিৰ শুদ্ধতাৰ পৰা পৃথক ৰাখক। এটা কাষ্ট মেৰামতি কৰিলে এইটো প্ৰমাণ নহয় যে সহায়ক এটাই বাছনি কৰা WinINet বিকল্পই কেৱল এটা নিয়ন্ত্ৰণ, এটা প্ৰক্ৰিয়া বা বৰ্তমান ব্যৱহাৰকাৰীৰ ছেটিংছত প্ৰভাৱ পেলায়। পুৰণি নমুনাৰ বাকী অংশ গ্ৰহণ কৰাৰ আগতে সেই API আচৰণ পৰীক্ষা কৰক। যদি ই ৰিফ্ৰেছ জাননীও পঠিয়ায়, উদ্দিষ্ট পৰিসৰৰ বাবে সেইবোৰ বাছনি কৰক।

সম্পৰ্কিত প্ৰবন্ধ