কীভাবে কেউ হট-অদল-বদলযোগ্য সি ++ মডিউলগুলি প্রয়োগ করতে পারে?


39

দ্রুত পুনরাবৃত্তির সময়গুলি গেমগুলির বিকাশের মূল চাবিকাঠি, অভিনব গ্রাফিক্স এবং আমার মতে ট্রাক লোডের বৈশিষ্ট্যযুক্ত ইঞ্জিনগুলির চেয়ে অনেক বেশি। এতে আশ্চর্যের কিছু নেই যে অনেক ছোট বিকাশকারী স্ক্রিপ্টিং ভাষা চয়ন করেন।

গেমটি বিরতি দিতে এবং সম্পদগুলি এবং কোডটি সংশোধন করতে সক্ষম হওয়ার ইউনিটি থ্রিডি উপায়, তারপরে চালিয়ে যান এবং পরিবর্তনগুলি অবিলম্বে কার্যকর হওয়ার জন্য এটি এর জন্য একান্ত দুর্দান্ত। আমার প্রশ্ন হ'ল, কেউ কি সি ++ গেম ইঞ্জিনগুলিতে একই রকম সিস্টেম প্রয়োগ করেছে?

আমি শুনেছি কিছু সত্যিই সুপার হাই এন্ড ইঞ্জিনগুলি করে, তবে বাড়ির বর্ধিত ইঞ্জিন বা গেমটিতে এটি করার কোনও উপায় আছে কিনা তা জানতে আমি আরও আগ্রহী।

স্পষ্টতই সেখানে বাণিজ্য থাকবে এবং আমি ভাবতে পারি না যে গেমটি থামার সময় আপনি কেবল আপনার কোডটি পুনরায় সংকলন করতে পারবেন, এটি প্রতিটি পরিস্থিতিতে বা প্রতিটি প্ল্যাটফর্মের অধীনে পুনরায় লোড করা এবং কাজ করা উচিত।

তবে সম্ভবত এআই প্রোগ্রামিং এবং সাধারণ স্তরের লজিক মডিউলগুলির পক্ষে এটি সম্ভব। এটি স্বল্প (বা দীর্ঘমেয়াদী) কোনও প্রকল্পে আমি এটি করতে চাই না তবে আমি কৌতূহল ছিল।

উত্তর:


26

এটি করা অবশ্যই আপনার পক্ষে সম্ভব, যদিও আপনার টিপিক্যাল সি ++ কোডের সাথে নয়; আপনাকে একটি সি-স্টাইলের লাইব্রেরি তৈরি করতে হবে যা আপনি রানটাইমে গতিশীলভাবে লিঙ্ক এবং পুনরায় লোড করতে পারেন। এটি সম্ভব করার জন্য, লাইব্রেরিতে অবশ্যই একটি অস্বচ্ছ পয়েন্টারের মধ্যে থাকা সমস্ত রাজ্য থাকতে হবে যা পুনরায় লোড করার পরে লাইব্রেরিতে সরবরাহ করা যেতে পারে।

টিমোথি ফারার তার পদ্ধতির বিষয়ে আলোচনা করেছেন:

"উন্নয়নের জন্য কোডটি একটি লাইব্রেরি হিসাবে সংকলিত হয়, একটি ছোট লোডার প্রোগ্রামটি লাইব্রেরির একটি অনুলিপি তৈরি করে এবং প্রোগ্রামটি চালানোর জন্য লাইব্রেরির অনুলিপি লোড করে দেয় start প্রোগ্রামটি শুরুতে সমস্ত ডেটা বরাদ্দ করে এবং কোনও ডেটা রেফারেন্স করার জন্য একটি একক পয়েন্টার ব্যবহার করে। আমি কেবলমাত্র পঠনযোগ্য ডেটা ছাড়া গ্লোবাল কিছুই ব্যবহার করি না the প্রোগ্রামটি চলাকালীন মূল লাইব্রেরিটি পুনরায় সংকলন করা যায় Then তারপরে একটি কী প্রেসে প্রোগ্রামটি লোডারটিতে ফিরে আসে এবং সেই একক ডেটা পয়েন্টারটি ফেরত দেয় load লোডার নতুন লাইব্রেরির একটি অনুলিপি তৈরি করে, অনুলিপিটি লোড করে এবং নতুন কোডে ডেটা পয়েন্টারে যায় Then ( মূল উত্স , এখন ওয়েব সংরক্ষণাগার মাধ্যমে উপলব্ধ )


আমি এটি ব্লেয়ারের উত্তরের চেয়ে পছন্দ করি, যেমন আপনি প্রকৃতপক্ষে প্রশ্নের উত্তর দেন।
জোনাথন ডিকিনসন

15

বাইনারি কোডের সাহায্যে হট-অদলবদল একটি খুব, খুব কঠিন সমস্যা। এমনকি যদি আপনার কোডটি পৃথক গতিশীল লিংক লাইব্রেরিতে স্থাপন করা হয় তবে আপনার কোডটির মেমোরিতে ফাংশনগুলির জন্য সরাসরি কোনও রেফারেন্স নেই বলে নিশ্চিত করা দরকার (যেহেতু ফাংশনের ঠিকানাটি একটি পুনরায় কম্পাইল দিয়ে পরিবর্তন করতে পারে)। এর মূল অর্থ হ'ল ভার্চুয়াল ফাংশনগুলি না ব্যবহার করা এবং কোনও কিছু যা ফাংশন পয়েন্টার ব্যবহার করে তা কিছু প্রেরণ টেবিলের মাধ্যমে করে।

লোমশ, বাধা জিনিস। কোডের জন্য একটি স্ক্রিপ্টিং ভাষা ব্যবহার করা ভাল যা দ্রুত পুনরাবৃত্তির প্রয়োজন।

কর্মক্ষেত্রে, আমাদের বর্তমান কোড বেসটি সি ++ এবং লুয়ার মিশ্রণ। লুয়া আমাদের প্রকল্পের কোনও ছোট অংশ নয় - এটি প্রায় 50/50 বিভক্ত। আমরা লুয়ার ফ্লাই অন ফ্লাইট পুনরায় লোডিং বাস্তবায়ন করেছি, যাতে আপনি কোডের একটি লাইন পরিবর্তন করতে, পুনরায় লোড করতে এবং চালিয়ে যেতে পারেন। আসলে, আপনি গেমটি আরম্ভ না করে লুয়া কোডে ঘটে যাওয়া ক্র্যাশ বাগগুলি ঠিক করতে এই কাজটি করতে পারেন!


3
আরেকটি গুরুত্বপূর্ণ বিষয় হ'ল এমনকি যদি আপনি কোনও সিস্টেমকে স্ক্রিপ্টে রাখতে চান না, আপনি যদি খুব তাড়াতাড়ি পুনরুক্তি করতে চান তবে লুয়ায় শুরু করা এখনও সম্পূর্ণ যুক্তিসঙ্গত হতে পারে, তারপরে আপনার যখন প্রয়োজন হবে তখন রাস্তার নিচে সি ++ এ যান অতিরিক্ত কর্মক্ষমতা এবং পুনরাবৃত্তির হার হ্রাস পেয়েছে। এখানে স্পষ্ট ত্রুটিটি হ'ল আপনি কোডটি পোর্টিং শেষ করেছেন, তবে অনেক সময় যুক্তিটি সঠিকভাবে পাওয়া শক্ত অংশ - কোডটি একবার লিখে ফেললে আপনি সেই অংশটি বের করে ফেলেন।
লোগান কিনকেড

15

(আপনি হাস্যকর মানসিক চিত্র ব্যতীত অন্য কিছু না হলে "বানর প্যাচিং" বা "হাঁসের খোঁচা" শব্দটি সম্পর্কে জানতে চাইতে পারেন ))

এটি একদিকে: যদি "আচরণ" পরিবর্তনের জন্য আপনার লক্ষ্যটি পুনরাবৃত্তির সময় হ্রাস পাচ্ছে, তবে কিছু উপায়ের চেষ্টা করুন যা আপনাকে বেশিরভাগ পথে নিয়ে যায় এবং ভবিষ্যতে আরও কিছু সক্ষম করার জন্য সুন্দরভাবে একত্রিত হন।

(এটি কিছুটা স্পর্শকাতর হয়ে উঠবে, তবে আমি প্রতিশ্রুতি দিচ্ছি যে এটি ফিরে আসবে!)

  • ডেটা দিয়ে শুরু করুন এবং ছোটটি শুরু করুন: সীমানায় পুনরায় লোড করুন ("স্তরগুলি" বা এর মতো), তারপরে ফাইল পরিবর্তনের বিজ্ঞপ্তিগুলি পেতে বা কেবল নিয়মিত ভোট দেওয়ার জন্য ওএস কার্যকারিতাটি ব্যবহার করার পথে কাজ করুন ।
  • (বোনাস পয়েন্ট এবং লোড লোমের সময়গুলির জন্য (আবার, পুনরাবৃত্তির সময় হ্রাসের সময়) ডেটা বেকিংয়ের দিকে নজর দিন ))
  • স্ক্রিপ্টগুলি ডেটা , এবং আপনাকে আচরণ পুনরাবৃত্তি করার অনুমতি দেয়। আপনি যদি কোনও স্ক্রিপ্টিং ভাষা ব্যবহার করেন তবে এখন আপনার কাছে বিজ্ঞপ্তি / সেই স্ক্রিপ্টগুলি পুনরায় লোড করার ক্ষমতা আছে, ব্যাখ্যা করা বা সংকলিত। গেম কনসোল, একটি নেটওয়ার্ক সকেট বা বর্ধমান রানটাইম নমনীয়তার জন্য আপনিও আপনার দোভাষীকে হুক করতে পারেন।
  • কোডটি ডেটাও হতে পারে : আপনার সংকলক ওভারলে , শেয়ার্ড লাইব্রেরি, ডিএলএল, বা এর মতো সমর্থন করতে পারে । সুতরাং ম্যানুয়াল বা স্বয়ংক্রিয় যাই হোক না কেন, আপনি এখন ওভারলে বা ডিএলএল আনলোড এবং পুনরায় লোড করার জন্য একটি "নিরাপদ" সময় চয়ন করতে পারেন। অন্যান্য উত্তরগুলি এখানে বিশদে যায়। মনে রাখবেন যে এর কিছু রূপগুলি ক্রিপ্টোগ্রাফিক স্বাক্ষর ভেসিফিকেশন, এনএক্স (নন-এক্সিকিউট) বিট বা অনুরূপ সুরক্ষা ব্যবস্থার সাথে গোলমাল করতে পারে ।
  • একটি গভীর, সংস্করণযুক্ত সেভ / লোড সিস্টেম বিবেচনা করুন। আপনি যদি কোড পরিবর্তনগুলির পরেও শক্তিশালীভাবে আপনার রাজ্য সংরক্ষণ এবং পুনরুদ্ধার করতে পারেন তবে আপনি আপনার গেমটি বন্ধ করে দিতে পারেন এবং ঠিক একই পয়েন্টে নতুন যুক্তি দিয়ে এটি পুনরায় চালু করতে পারেন। সম্পন্ন করার চেয়ে সহজেই বলা হয়েছে, তবে এটি করণীয় এবং নির্দেশাবলী পরিবর্তন করতে মেমরির পোকার চেয়ে এটি স্পষ্টতই সহজ এবং বহনযোগ্য।
  • আপনার গেমের গঠন এবং নির্ধারণের উপর নির্ভর করে আপনি রেকর্ডিং এবং প্লেব্যাক করতে সক্ষম হতে পারেন । যদি সেই রেকর্ডিংটি কেবল "গেম কমান্ড" এর চেয়ে বেশি হয় (একটি কার্ড গেমটি মনে করুন, উদাহরণস্বরূপ), আপনি চান সমস্ত রেন্ডারিং কোড পরিবর্তন করতে পারেন এবং আপনার পরিবর্তনগুলি দেখতে রেকর্ডিংটি পুনরায় খেলতে পারেন। কিছু গেমের জন্য এটি কিছু সূচনা পরামিতি (যেমন একটি এলোমেলো বীজ) এবং তারপরে ব্যবহারকারীর ক্রিয়া রেকর্ড করার মতো "সহজ"। কারও কারও কাছে এটি অনেক জটিল is
  • সংকলন সময় কমাতে চেষ্টা করুন । পূর্বোক্ত সেভ / লোড বা রেকর্ড / প্লেব্যাক সিস্টেমগুলির সাথে বা এমনকি ওভারলে বা ডিএলএলগুলির সাথে একত্রে এটি অন্য কোনও জিনিসের তুলনায় আপনার টার্নরাউন্ডকে আরও হ্রাস করতে পারে।

আপনি ডেটা বা কোড উভয়ই পুনরায় লোড করার সমস্ত উপায় না পেয়েও এই পয়েন্টগুলির মধ্যে অনেকগুলি উপকারী।

সহায়ক উপাখ্যান:

একটি বৃহত পিসি আরটিএসে (~ 120 ব্যক্তির দল, বেশিরভাগ সি ++), সেখানে একটি অবিশ্বাস্যভাবে গভীর রাষ্ট্রীয় সংরক্ষণ ব্যবস্থা ছিল, যা কমপক্ষে তিনটি উদ্দেশ্যে ব্যবহৃত হয়েছিল:

  • একটি "অগভীর" সেভটি ডিস্কে নয় বরং সিআরসি ইঞ্জিনকে খাওয়ানো হয়েছিল যাতে মাল্টিপ্লেয়ার গেমগুলি প্রতি 10-30 ফ্রেমে লক-স্টেপ সিমুলেশন থেকে একটি সিআরসি থাকে; এটি নিশ্চিত করেছে যে কেউ প্রতারণা করছে এবং পরে কিছু ফ্রেম ডিজাইন বাগগুলি ধরেছিল
  • যদি এবং যখন কোনও মাল্টিপ্লেয়ার ডিজাইনক বাগ ঘটে থাকে তবে প্রতিটি ফ্রেমের জন্য একটি অতিরিক্ত-গভীর সংরক্ষণ করা হয়েছিল এবং আবার সিআরসি ইঞ্জিনকে খাওয়ানো হয়েছিল, কিন্তু এবার সিআরসি ইঞ্জিনটি অনেকগুলি সিআরসি তৈরি করবে, প্রতিটি ছোট ছোট ব্যাচের জন্য বাইট for এই পদ্ধতিতে, এটি আপনাকে বলতে পারে যে ঠিক কোন রাজ্যের অংশটি শেষ ফ্রেমের মধ্যে বিভক্ত হওয়া শুরু করেছিল। এটি ব্যবহার করে এএমডি এবং ইন্টেল প্রসেসরের মধ্যে একটি বাজে "ডিফল্ট ফ্লোটিং পয়েন্ট মোড" পেয়েছি।
  • একটি সাধারণ গভীরতা সেভ সংরক্ষণ করতে পারে না যেমন আপনার ইউনিটটি অ্যানিমেশনের সঠিক ফ্রেমটি খেলছিল তবে এটি গেমপ্লে চলাকালীন যে কোনও সময়ে আপনাকে সংরক্ষণ এবং পুনরায় শুরু করার অনুমতি দিয়ে আপনার ইউনিটগুলির সকলের অবস্থান, স্বাস্থ্য ইত্যাদি পেতে পারে।

আমি তখন থেকে ডিএসের জন্য সি ++ এবং লুয়া কার্ড গেমটিতে ডিটারমিনিস্টিক রেকর্ড / প্লেব্যাক ব্যবহার করেছি। আমরা এআই (সি ++ সাইডে) এর জন্য ডিজাইন করা এপিআইতে হুক করেছি এবং সমস্ত ব্যবহারকারী এবং এআই ক্রিয়া রেকর্ড করেছি। আমরা গেমটিতে এই কার্যকারিতাটি ব্যবহার করেছি (প্লেয়ারের জন্য একটি রিপ্লে সরবরাহ করতে), তবে সমস্যাগুলি নির্ণয়ের জন্যও: যখন কোনও ক্র্যাশ বা বিজোড় আচরণ ছিল তখন আমাদের সংরক্ষণের ফাইলটি পেতে এবং এটি একটি ডিবাগ বিল্ডে ফিরে খেলতে হয়েছিল।

আমি তখন থেকে কয়েকবারেরও বেশি ওভারলেগুলি ব্যবহার করেছি এবং আমরা আমাদের "স্বয়ংক্রিয়ভাবে এই ডিরেক্টরিটি স্পাইডার করব এবং হ্যান্ডহেল্ড" সিস্টেমে নতুন সামগ্রী আপলোড করব combined আমাদের যা করতে হবে তা হ'ল চটজলদি / স্তর / যা কিছু ছেড়ে আবার ফিরে আসবে এবং কেবলমাত্র নতুন ডেটা (স্প্রাইটস, স্তর স্তর বিন্যাস ইত্যাদি) লোড করবে না তবে ওভারলেতে কোনও নতুন কোড থাকবে। দুর্ভাগ্যক্রমে কপি সুরক্ষা এবং বিশেষত কোড আচরণ করে এমন অ্যান্টি-হ্যাকিং প্রক্রিয়াগুলির কারণে আরও সাম্প্রতিক হ্যান্ডহেল্ডগুলির সাথে এটি আরও শক্ত হয়ে উঠছে। আমরা এখনও লুয়া স্ক্রিপ্টগুলির জন্য এটি করি।

সর্বশেষে তবে সর্বনিম্ন নয়: আপনি (এবং আমার বিভিন্ন খুব ছোট নির্দিষ্ট পরিস্থিতিতে) সরাসরি নির্দেশিকা ওপকোডগুলি প্যাচ করে কিছুটা হাঁসের খোঁচা করতে পারেন। আপনি যদি স্থির প্ল্যাটফর্ম এবং সংকলকটিতে থাকেন তবে এটি সবচেয়ে ভাল কাজ করে এবং যদিও এটি প্রায় অভাবনীয়, খুব বাগ-প্রবণ এবং আপনি যেটি দ্রুত সম্পাদন করতে পারবেন তাতে সীমাবদ্ধ তাই আমি বেশিরভাগই কেবল এটি ডিবাগ করার সময় পুনরায় রুট কোডে ব্যবহার করি। এটা তোলে করেন আপনি তাড়ার মধ্যে আপনার নির্দেশ সেট স্থাপত্য সম্পর্কে অনেক একটি জাহান্নাম, যদিও শেখান।


6

আপনি রানটাইম সময়ে ডায়ামিক লিংক লাইব্রেরি (বা ইউএনআইএক্স-এ শেয়ার্ড লাইব্রেরি) হিসাবে মডিউলগুলি প্রয়োগ করার জন্য এবং লাইব্রেরি থেকে ডায়নামিকভাবে ফাংশনগুলি লোড করতে dlopen () এবং dlsym () ব্যবহার করে হট-অদলবদ মডিউলগুলির মতো কিছু করতে পারেন।

উইন্ডোজের সমতুল্য হ'ল লোডলিবারি এবং গেটপ্রোকএড্রেস।

এটি একটি সি পদ্ধতি এবং এর সি ++ ব্যবহার করে কিছু সমস্যা রয়েছে, আপনি এখানে সে সম্পর্কে পড়তে পারেন ।


এই গাইডটি হট-
অদল

4

আপনি যদি ভিজ্যুয়াল স্টুডিও সি ++ ব্যবহার করছেন তবে আপনি নির্দিষ্ট পরিস্থিতিতে আপনার কোডটি বিরতি দিতে এবং পুনরায় সংকলন করতে পারেন। ভিজ্যুয়াল স্টুডিও সম্পাদনা এবং চালিয়ে যাওয়া সমর্থন করে । ডিবাগারে আপনার গেমটি সংযুক্ত করুন, এটি একটি ব্রেকপয়েন্টে থামিয়ে দিন এবং আপনার ব্রেকপয়েন্টের পরে কোডটি সংশোধন করুন। আপনি যদি সংরক্ষণ করতে এবং তারপরে চালিয়ে যেতে চান, ভিজ্যুয়াল স্টুডিও কোডটি পুনরায় সংকলন করার চেষ্টা করবে, চলমান এক্সিকিউটেবলের মধ্যে এটি পুনরায় সন্নিবেশ করান, এবং চালিয়ে যাবেন। যদি সমস্ত কিছু ঠিকভাবে চলে যায় তবে আপনি যে পরিবর্তনটি করেছেন তা পুরো সংকলন-বিল্ড-পরীক্ষার চক্রটি না করে চলমান গেমের জন্য প্রযোজ্য। তবে নিম্নলিখিতগুলি এটি কাজ করা বন্ধ করবে:

  1. কলব্যাক ফাংশন পরিবর্তন করা সঠিকভাবে কাজ করবে না। E&C কোডের একটি নতুন অংশ যুক্ত করে এবং নতুন ব্লকের দিকে নির্দেশ করতে কল টেবিল পরিবর্তন করে কাজ করে। কলব্যাকস এবং ফাংশন পয়েন্টার ব্যবহার করে যে কোনও কিছুর জন্য এটি এখনও পুরানো, মোছাবিহীন কলগুলি সম্পাদন করবে। এটি ঠিক করার জন্য আপনার কাছে একটি মোড়ক কলব্যাক ফাংশন থাকতে পারে যা একটি স্ট্যাটিক ফাংশনটিকে কল করে
  2. হেডার ফাইলগুলি পরিবর্তন করা প্রায়শই কাজ করবে না never এটি প্রকৃত ফাংশন কলগুলি সংশোধন করার জন্য ডিজাইন করা হয়েছে।
  3. বিভিন্ন ভাষার নির্মাণের কারণে এটি রহস্যজনকভাবে ব্যর্থ হবে। আমার ব্যক্তিগত অভিজ্ঞতা থেকে এনামগুলির মতো প্রাক-ঘোষিত জিনিসগুলি প্রায়শই এটি করবে।

আমি ইউআই পুনরাবৃত্তির মতো জিনিসের গতি নাটকীয়ভাবে উন্নত করতে সম্পাদনা এবং চালিয়ে যাওয়া ব্যবহার করেছি। আসুন ধরা যাক আপনার কোডে সম্পূর্ণরূপে একটি ইউআইআই নির্মিত হয়েছে যা আপনি ঘটনাক্রমে দুটি বাক্সের ড্র অর্ডারটি অদলবদল করেছেন যাতে আপনি কিছুই দেখতে না পান। 2 লাইনের কোড লাইভ পরিবর্তন করে আপনি নিজেকে একটি তুচ্ছ UI স্থিরতা পরীক্ষা করতে 20 মিনিটের সংকলন / বিল্ড / পরীক্ষার চক্র সংরক্ষণ করতে পারেন।

এটি কোনও উত্পাদনের পরিবেশের জন্য সম্পূর্ণ সমাধান নয় এবং আমি আপনার যুক্তিটি যতটা সম্ভব ফাইল ফাইলে সরিয়ে নিয়ে সেই ডাটা ফাইলগুলিকে পুনরায় লোডযোগ্য করে তোলার পক্ষে সবচেয়ে ভাল সমাধান খুঁজে পেয়েছি।


কোন সংকলন চক্রটি 20 মিনিট সময় নেয়?!?! আমি বরং নিজেকে গুলি করব
JqueryToAddNumbers

3

অন্যরা যেমন বলেছে, এটি একটি কঠিন সমস্যা, গতিশীলভাবে সি ++ যুক্ত করা। তবে এটি একটি সমাধান করা সমস্যা - আপনি হয়তো সিওএম বা কয়েক বছরের মধ্যে এটিতে প্রয়োগ হওয়া বিপণনের নাম শুনেছেন: অ্যাক্টিভএক্স।

বিকাশকারী দৃষ্টিকোণ থেকে সিওএমের কিছুটা খারাপ নাম রয়েছে কারণ এটি ব্যবহার করে তাদের কার্যকারিতা প্রকাশ করার জন্য সি ++ উপাদানগুলি প্রয়োগ করার জন্য অনেক প্রচেষ্টা হতে পারে (যদিও এটিটিএটিএল - অ্যাক্টিভএক্স টেমপ্লেট লাইব্রেরির সাহায্যে সহজ করা হয়েছে)। ভোক্তার দৃষ্টিকোণ থেকে এটির একটি খারাপ নাম রয়েছে কারণ অ্যাপ্লিকেশনগুলি এটি ব্যবহার করে, উদাহরণস্বরূপ কোনও ওয়ার্ড ডকুমেন্টে এক্সেল স্প্রেডশিট বা এক্সেল স্প্রেডশিটে কোনও ভিজিও ডায়াগ্রাম এম্বেড করার জন্য, দিনটিতে কিছুটা পিছনে ক্র্যাশ হওয়ার প্রবণতা রয়েছে। এবং এটি একই সমস্যাগুলিতে নেমে আসে - এমনকি মাইক্রোসফ্ট যে সমস্ত দিকনির্দেশনা দেয় সেগুলি সহ, সিওএম / অ্যাক্টিভএক্স / ওএইএল সঠিক ছিল / কঠিন ছিল।

আমি জোর দিয়ে বলব যে সিওএমের প্রযুক্তি নিজের মধ্যে অন্তর্নিহিত খারাপ নয়। প্রথমত, ডাইরেক্টএক্স এটির কার্যকারিতা প্রকাশ করার জন্য সিওএম ইন্টারফেস ব্যবহার করে এবং এটি বেশ কার্যকরভাবে কাজ করে, যেমন বিপুল পরিমাণ অ্যাপ্লিকেশন যা এটি অ্যাক্টিভএক্স নিয়ন্ত্রণ ব্যবহার করে ইন্টারনেট এক্সপ্লোরার এম্বেড করে। দ্বিতীয়ত, গতিশীলভাবে সি ++ কোড যুক্ত করার সহজ উপায়গুলির মধ্যে একটি - একটি সিওএম ইন্টারফেস মূলত কেবল খাঁটি ভার্চুয়াল শ্রেণি। যদিও এতে কর্বার মতো আইডিএল রয়েছে, আপনি এটি ব্যবহার করতে বাধ্য হবেন না, বিশেষত যদি আপনি যে ইন্টারফেসগুলি সংজ্ঞায়িত করেন কেবলমাত্র আপনার প্রকল্পের মধ্যেই ব্যবহৃত হয়।

আপনি যদি উইন্ডোজের জন্য লিখছেন না, তবে মনে করবেন না যে সিওএম বিবেচনা করার মতো নয়। মোজিলা তাদের কোডবেসে এটি পুনরায় প্রয়োগ করেছে (ফায়ারফক্স ব্রাউজারে ব্যবহৃত) কারণ তাদের সি ++ কোডটি সংযুক্ত করার জন্য তাদের একটি উপায় প্রয়োজন।


2

গেমপ্লে কোডের জন্য এখানে রানটাইম-সংকলিত সি ++ প্রয়োগ রয়েছে । এছাড়াও, আমি জানি কমপক্ষে একটি মালিকানাধীন গেম ইঞ্জিন রয়েছে যা একই কাজ করে। এটি কৃপণ, কিন্তু করণীয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.