আমি বর্তমানে উইন্ডোজের জন্য একটি সি ++ গ্রন্থাগার তৈরি করছি যা ডিএলএল হিসাবে বিতরণ করা হবে। আমার লক্ষ্য বাইনারি আন্তঃক্রিয়াশীলতা সর্বাধিক করা; আরও স্পষ্টভাবে, আমার ডিএলএলে ফাংশনগুলি ডিএসএল পুনরায় সংকলন না করে এমএসভিসি ++ এবং মিনজিডাব্লুয়ের একাধিক সংস্করণ সহ সংকলিত কোড থেকে অবশ্যই ব্যবহারযোগ্য হবে। তবে, কোন কলিং কনভেনশন সেরা, cdecl
বা তা নিয়ে আমি বিভ্রান্ত stdcall
।
মাঝে মাঝে আমি মত বিবৃতি দিয়ে, যা বৈপরীত্য মত "" সি কলিং কনভেনশন শুধুমাত্র একটি একই যাদের জুড়ে কম্পাইলার হতে নিশ্চিত হয় "বিবৃতি শুনার ব্যাখ্যার মধ্যে কিছু বৈচিত্র আছে cdecl
বিশেষ করে কিভাবে মান প্রত্যাবর্তন এ, "। এটি কোনও দৃশ্যমান সমস্যা ছাড়াই তারা বিতরণ করা ডিএলএলগুলিতে সি কলিং কনভেনশনটি ব্যবহার করার জন্য নির্দিষ্ট গ্রন্থাগার বিকাশকারীদের ( লাইবসডফায়ার মতো ) থামিয়ে দেবে বলে মনে হয় না ।
অন্যদিকে, stdcall
কলিং কনভেনশনটি সুসংজ্ঞায়িত বলে মনে হচ্ছে। আমাকে যা বলা হয়েছে, সেগুলি থেকে সমস্ত উইন্ডোজ সংকলকগুলিকে মূলত এটি অনুসরণ করা প্রয়োজন কারণ এটি উইন 32 এবং সিওএম এর জন্য ব্যবহৃত কনভেনশন। এটি Win32 / COM সমর্থন ব্যতীত একটি উইন্ডোজ সংকলক খুব বেশি কার্যকর হবে না এই ধারণার উপর ভিত্তি করে। কোড স্নিপেট ফোরামে পোস্ট অনেক হিসাবে ফাংশন ডিক্লেয়ার stdcall
কিন্তু আমি একটি একক পোস্টে যা স্পষ্টভাবে ব্যাখ্যা করে এটি মনে করতে পারে না কেন ।
সেখানে প্রচুর বিরোধী তথ্য রয়েছে এবং আমি যে প্রতিটি অনুসন্ধান চালাই তা আমাকে বিভিন্ন উত্তর দেয় যা সত্যই আমাকে দুজনের মধ্যে সিদ্ধান্ত নিতে সহায়তা করে না। আমি কেন অপরের চেয়ে একটি বেছে নিতে হবে (বা কেন দুটি সমতুল্য) সে সম্পর্কে একটি পরিষ্কার, বিস্তারিত, তর্কযুক্ত ব্যাখ্যা অনুসন্ধান করছি।
মনে রাখবেন যে এই প্রশ্নটি কেবল "ক্লাসিক" ফাংশনগুলিতেই প্রযোজ্য নয়, তবে ভার্চুয়াল সদস্য ফাংশন কলগুলিতেও প্রযোজ্য, যেহেতু বেশিরভাগ ক্লায়েন্ট কোডটি আমার ডিএলএলের সাথে "ইন্টারফেস", খাঁটি ভার্চুয়াল ক্লাসগুলির (যেমন নিচের উদাহরণগুলি এখানে এবং সেখানে বর্ণিত হয়েছে ) মাধ্যমে ইন্টারফেস করবে ।