COM Interoperability Explained
بسم الله الرحمن الرحيم
سأقوم اليوم بشرح موضوع ال COM Components و كيفية استخدامها في التطبيقات المبنيه في الدوت نت, و هذا هو اول مقال اقوم بكتابته و خاصة باللغة العربية فارجو من الاخوة ان وجد خطأ ان ينبهني و سأقوم بتصحيح الخطأ
تخيل انك مطور للغة الفيجوال بيسك و قمت بكتابه العديد من المكونات عن طريق هذه اللغة و انك تعتمد و بشكل اساسي علي مكوناتك التي قمت بتطويرها علي مدار الوقت في بناء اغلب تطبيقاتك , و مع ظهور بيئة الدوت النت اردت التحويل الي هذا البيئة و الاستفادة من جميع مميزاتها.
فمن المؤكد ان قرار الانتقال الي بيئة تطوير جديدة سيكون امر صعب لانه ليس من السهل التخلص من نتاج سنين من العمل و التطوير!
و لكن ميكروسوفت عندما اصدرت بيئة الدوت , ادركت ان قرار الانتقال الي الدوت نت لن يكون سهلا علي الاطلاق و ذلك للعديد من الاسباب منها مثلا : ان الدوت نت بيئة غنية جدا بالادوات و المكونات و هذا سيتطلب وقت من المطور لكي يتقن استخدامها.
و لذا قد اتاحت ميكروسوفت للمطور استخدام المكونات التي تم بنائها خارج بيئة الدوت النت لكي تستخدم في بناء تطبيقات الدوت نت من خلال ما يسمي بال Com Components Interoperability
كلنا نعرف ان الكود او المكونات التي تبني في بيئة الدوت نت يطلق عليها Managed Code و معني managed ان الكود يتمتع بالمميزات و الخواص التي تعطيعها ال CLR مثل ال garbage collection , و ال memory management و ال security .
و العكس فالمكونات التي لا تخضع لسيطره ال CLR و الخواص التي تتيحهاالدوت نت يطلق عليه unmanaged code .
كيفيه تداخل الmanaged code مع ال unmanaged code في بيئة الدوت نت:
المكونات المبنة في بيئه الدوت نت او ال managed code تعتقد ان كل المكونات الموجوده و المتداخله معه تخضع لسيطره ال CLR و الخواص التي تتيحها و هنا تظهر المشكلة !!
فكيف يمكن للمكونات المبنية في بيئات اخري غير الدوت نت ان تتداخل مع المكونات المبنية في الدوت نت؟
فكان و لابد من انشاء بيئه وسيطه ليتم التداخل بينهما و هنا يأتي دور ال runtime callable wrapper
ال runtime callable wrapper هو عباره عن بروكسي ( بوابة ) يتلقي الاوامر من مكون و يقوم بادخال تعديلات عليه ثم تمريرها الي مكون اخر لكي يتم التداخل بينهما
و لكي نبسط الموضوع فيمكننا ان نتخيل ال
runtime callable wrapper كمترجم بين شخصين فهو يتلقي الحديث من شخص ثم يقوم بترجمته و تحويله الي اللغه التي يفهما الاخر و العكس
طرق استخدام ال unamaged components في تطبيقات الدوت نت
سنعرض الان الطرق المختلفه لاستخدام ال com compnents في تطبيقات الدوت نت
و للعلم فان هذه الطرق تنطبق علي ActiveX Controls و ال Com Components و ال Com + Components.
اولا هناك طريقتين الاولي استخدام ال tlbimp.exe ( Type Library Importer Tool) و الاخري الاستخدام المباشر للمكون عن طريق ال Visual Studio.Net .
ملحوظه :1.لكي تتمكن من تطبيق الخطوات التاليه يمكنك استخدام أي dll مبني بلغه اخري مثل ال Visual Basic او ال Visual Basic.Net او ان تقوم بانشاء مشروع عن طريق الvisual studio V.06
و قم بتسميته MyComComponent ثم اضف Class ا لي المشروع و ليكن اسمه MyClass
ثم قم بتحويله الي dll عن طريق
File à Make MyComComponent.dll
2. لكي تتمكن من استخدام أي مكون فلابد ان يكون مسجلا!
فاذا منت قد بنيته مستخدما Visual studioV.06 فقد تم تسجيله تلقائيا اما اذا كنت تريد استخدام مكون من الانترنت او من مطور اخر فلابد من تسجيله اولا مستخدما الاداة regsvr32.exe
مثلا regsvr32.exe ExternalComCompnent.dll
فExternalComComponent.dll هو المكون المراد تسجيله
اولا استخدام ال tlbimp.exe :
قم بفتح ال Command Prompt الخاصه بال Visual Studio.Net عن طريق الخطوات التالية
Start à Programs àMicrosoft Visual Studio.Net à Visual Studio.Net Tools à Visual Stduio.Net Command Prompt
و من داخل ال Command Prompt قم الدخول الي الملف الدذي يحتوي علي ملف ال dll
ثم قم بكتابة هذا الامر
Tlbimp.exe MyComComponent.dll /out:MyManagedComCompnent.dll
الخطوة الثانية و هي انشاء ًهىWindows application لنختبر الCom Compnent و لكي تتمكن من استخدام ال dll في تطبيق الدوت نت , انشيء ال windows application
ثم من ال Solution Expolrer اخترReferences ثم Add Reference
استخدم Browse لكي تصل الي الملف الذي يحتوي ال MyManagedComCompnent.dll ثم Ok
الان يمكنك الذهاب الي الكود الخاص بالفورم المبني في ال Visual Studio.Net و قم بوضع reference الي MyManagedComComponent في اعلي الكود
Using MyManagedComComponent ;
و الان بعد اضافة الDirective الخاص ب MyManagedComComponent يمكنك الاشارة الي MyClass من داخل الكود و استخدام جميع ال Functions التي يحتويها MyClass كأنك تستخدم class مبني بلغه السي شارب
عن طريق الاشاره اليه
مثلا
MyClass aaa = new MyClass();
ثم استخدام ال functions مثلا
aaa.function
الطريقه الثانية استخدام ال Com Component مباشرة:
هي الاسهل و الابسط
كل ما عليك فعله هو : من خلال ال Solution Explorer à References à Add Reference
ثم اختر COM Tab و استخدام Browse حتي تصل الي MyComComponent.dll ثم Select ثم Ok.
ثم يمكنك من خلال الكود استخدام ال المكتبه داخل الكود الخاص بك مثلا
MyComComponent.MyClass aaa = new MyComComponent.MyClass();
هذا الطريقه توفر خطوات استخدام ال tlbimp.exe و تنشيء ال wrapper لك
و بعد ان تعرفنا علي كيفية استخدام ال unamanged components من خلال الدوت نت
يبقي لنا ان نوضح متي يتم تفضيل طريقة علي الاخري
فمثلا اذا كان ال Com Component سيستخدم في تطبيق واحد فالطريقه الافضل هي استخدامه مباشره عن طريق ال Visual stduio.Net اما اذا كان الComponent مشترك بين عده تطبيقات Shared Component
فالافضل لك هو استخدام ال tlbimp.exe ثم تسجيل الملف الناتج في ال GAC
Global Assembly Cache