سؤال

أفكر في تعلم com. لكن سمعت أن Microsoft أطلقت .NET كبديل لـ COM. فهل يستحق تعلم كوم؟ في الواقع ، بدأت في تعلم COM لبرنامج تشغيل جهاز UMDF. هل هناك أي طريقة بديلة للعمل على UMDF باستثناء com؟

هل كانت مفيدة؟

المحلول

UMDF هو إطار لتطوير برامج تشغيل جهاز وضع المستخدم. أعتقد أن هناك متطلبات رئيسية لبرنامج تشغيل الجهاز هو: تحميل سريع. لا أرغب في تأخير أوقات بدء التشغيل الخاصة بي لمجرد أن لدي برنامج تشغيل غير تقليدي يجب أن يتحمل وتوصيف إطار .NET (مع ذلك مع ذلك).

من المؤكد أنه يمكنك تطوير مكتبات com المتضخمة أيضًا ولكن من خلال كونك مؤهلاً يمكنك تجنبها. لا يمكنك تجنب .NET وقت التشغيل.

لذلك ، حتى لو سمح UMDF بتطوير .NET ، فإنني في هذه المرحلة الزمنية لن ترغب في كتابة برامج تشغيل الأجهزة في .NET.

لا تفهموني خطأ. أنا أحب .net. لا أعتقد أنه يمزج بشكل جيد مع برامج تشغيل الأجهزة حتى لو كنا نتحدث عن برامج تشغيل UserMode.

عند النظر إلى com ، أعتقد أنه يساعد على فهم سبب تطويره: لتوفير القدرة على التواصل بين المكونات التي تم تطويرها في بيئات مختلفة. كان هذا مرة أخرى في الثمانينات. الآن اشتكى الناس من COM على مر السنين ، لكنه في الواقع ناجح للغاية في ذلك. كانت هناك بعض الأخطاء في نموذج نشر COM (أي التبعية السجل) وغيرها من خيارات التصميم المثيرة للاهتمام التي جعلت المطورين يخدشون رؤوسهم. ومع ذلك ، فإن جوهر com (أي iunknown) لا يزال سليم IMO.

نصائح أخرى

كوم قديم ، مملة ومحبطة. لا أعتقد أن أي شخص استمتع بالعمل مع كوم. عمومًا ، أوصي بعدم تعلمه إلا إذا كان لديك سبب مقنع حقًا. إذا كانت هناك مكتبة COM تحتاج إلى استخدامها ، فستتعلم بدلاً من ذلك كيفية استخدامها من خلال COM Interop ، والتي تمكنك من العمل مع COM من .NET.

لكي نكون واضحين ، كان المقصود من .NET أن يكون بديلاً لـ COM. وقد نجح ذلك بشكل جيد ، لقد كان ناجحًا للغاية. لكن كوم هو في كل مكان في Windows ، لا يمكنك التخلص من عصا في برنامج نموذجي وعدم تشغيل COM في مكان ما. يبدأ ذلك مع الجزء الأول من التعليمات البرمجية في أي برنامج .NET GUI ، [Stathread].

هناك الكثير والكثير من الأشياء في النوافذ التي لم تحصل على Wrendly .NET Wrapper حتى الآن. لا يلزم ذلك دائمًا ، يتمتع CLR بدعم ممتاز لـ COM interop. مرئي تمامًا من مربع الحوار المرجعي إضافة ، تمتلئ علامة تبويب COM بالأشياء الجيدة. لكن ما تراه في تلك القائمة هو مكونات تم تصميمها على وجه التحديد لتكون سهلة الاستخدام من أي بيئة التشغيل. يقومون بتنفيذ مجموعة فرعية من COM تسمى "Ole Automation".

الأتمتة هي مجموعة فرعية مقيدة للغاية ، فهي تعمل بشكل جيد لأن ما يمكنك فعله بالفعل محدود. ومع ذلك ، هناك GOBS من التعليمات البرمجية التي لا تتناسب مع هذه المجموعة الفرعية. النوع الذي لا يمكنك العثور على مكتبة نوع. بدون مكتبة الكتابة ، أنت مشدود في .NET. العنصر الأكثر وضوحا مع هذه المشكلة هو قذيفة. مستكشف Windows. كتابة تمديد shell في الكود المدارة الصعب.

تكمن المشكلة في أن إعلانات واجهة COM تم تصميمها في الأصل للعمل بشكل جيد على برنامج التحويل البرمجي الذي يطبق ميراثًا متعدد. C ++ على وجه التحديد. لا يتم تعيين إعلان واجهة .NET بشكل جيد لواجهة com إذا كانت واجهة com مستمدة من واجهة com أخرى. CLR يولد طاولة V الخطأ. تم التطرق إليه في هذا مقال مجلة MSDN, ، وإن كان استنتاج المؤلف خاطئ للغاية.

أنت يستطيع اكتب إعلانات واجهة com بلغة .NET وتنفيذها. إنه فقط تحصل عليه رقم مساعدة على الإطلاق من SDK. وستحتاج إلى معرفة كوم بشكل جيد للحصول عليها بشكل صحيح.

UMDF يناسب هذا النموذج أيضا ، واجهاته مشتقة من iunknown. لا يوجد مكتبة نوع. لا غلاف مُدار الذي أعرفه. أنت استطاع اكتب التعليمات البرمجية الخاصة بك في C# ولكن عليك كتابة جميع إعلانات الواجهة بنفسك. من الناحية الواقعية ، ينطبق C ++ فقط هنا.

نعم ، ستحتاج إلى تعلم com.

كان com مفيدًا لأنه سمح لك ببناء واجهة برمجة تطبيقات مستقلة للغة يمكن استهلاكها من لغات متعددة. الآن يستخدم .NET لغرض Sampe تقريبًا ، على الرغم من أنه أقل سهولة. إذا قمت برمجة .NET ، فإن العديد من "Just Work" من COM API ، على الرغم من أنه من الجيد الحصول على بعض الفهم الأساسي لكيفية عمل COM (بحيث يستخدم COM إعادة التصميم لإدارة الذاكرة ، في حين يستخدم .NET مجموعة القمامة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top