الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أستخدام عناصر COM

مغلق
بدأه sharp7 في 26 أبريل 2003 · 4 رد · 2,399 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

يمكن أستخدام عناصر COM في VB.NET وذلك عن طريق الربط أو التوثيق المبكر Early binding أو الربط أو التوثيق المتأخر Late binding

الربط المبكر Early binding

--------------------------:

دعنا نفترض اننا بصدد اضافة عنصر التحكم ActiveSkin:

1)أنشئ مشروع جديد.

2)انقر بالزر الأيمن للماوس على القائمة References

3)اختر من القائمة Add Reference

4)اختر من مربع الحوار العنصر الذي تريد (في حالتنا العنصر ActiveSkin)

5)اذا لم تجد العنصر في القائمة انقر على الزر Browse وابحث عنه في جهازك.

6)في النهاية ستجد عنصر جديد قد تم اضافته الي القائمة Reference.

*- والان تستطيع استخدامه كأي عنصر .NET في مثالنا يمكن استخدامه هكذا:

Dim skin As New ACTIVESKINLib.SkinClass()
        skin.LoadSkin("C:SkinsGALAXY.SKN")
        skin.ApplySkin(Me.Handle.ToInt32)

ملاحظة: ستتفاجئ بأن تأثير ActiveSkin سيختفي بعد فترة غير متوقعة :), وسبب في ذلك هو G.C لذا يفضل جعل المتغيرات عامة public.

#2

الربط المتأخر Late binding

--------------------------

في بعض الاحيان نحتاج لربط المتأخر عندما لا يحتوي عنصر COM على معلومات كافيه تساعد VS.NET على معرفتة أسماء المناهج Methods و الخواص properties للعنصر في وقت التصميم Design time.

1)أبدأ مشروع جديد.

2)ابدأ بكتابة الشفرة في الحدث الذي تراه مناسبا, مثلا في الحدث Form1_Load

Dim SkinType As System.Type
Dim SkinObj As Object

SkinType = Type.GetTypeFromProgID("ActiveSkin4.Skin")


        SkinObj = Activator.CreateInstance(SkinType)

        Dim paramters() As Object = {"C:SkinsGALAXY.SKN"}

        SkinType.InvokeMember("LoadSkin", Reflection.BindingFlags.InvokeMethod, Nothing, SkinObj, paramters)

        paramters(0) = Me.Handle.ToInt32

        SkinType.InvokeMember("ApplySkin", Reflection.BindingFlags.InvokeMethod, Nothing, SkinObj, paramters)

ملاحظة: استخدمت في هذا المثال ActiveSkin 4.

والان لنحاول توضيح الأوامر المستخدمة:

أ)

Type.GetTypeFromProgID("ActiveSkin4.Skin")

*- وهذا الأمر يساعد على معرفة نوع التصريح عن طريق معرفة معرف البرنامج ProgID. والأنواع التصريح هي:

- Class Type

- Interface Type

- Array Type

- Value Type

- Enumera Type

(في مثالنا سيكون من نوع Class)

Q)سؤال وهو كيف يمكن معرفت ProgID؟

A)يمكن عن طريق سجل النظام Registry كالتالي:

Start > Run > RegEdit اذهب للمفتاح HKEY_CLASSES_ROOT وابحث عن الصنف class الذي تريده

(في مثالنا HKEY_CLASSES_ROOTActiveSkin4.Skin اي اننا نرغب بأستخدام الصنف Skin)

ب)

SkinObj = Activator.CreateInstance(SkinType)

ببساطة يستخدم هذا الأمر لأنشاء مثيل instance على حسب النوع ProgID

(تذكر في مثالنا من نوع class). وعند هذه النقطة نكون قد حصلنا على كائن موجود فعلا في الذاكرة.

ج)

Dim paramters() As Object = {"C:SkinsGALAXY.SKN"}

*- هذة المصفوفة array تحمل وسائط parameters للمنهج method التي سنستخدمها.

فمثلا الدالة LoadSkin في مثالنا تحتاج وسيط واحد من اجل تحديد مسار ملف السكن skin file لذلك تم تهيئتة المصفوفة بوسيط و احد يحمل مسار الملف.

د)

SkinType.InvokeMember("LoadSkin", Reflection.BindingFlags.InvokeMethod, Nothing, SkinObj, paramters)

*- تستطيع عن طريق هذا الأمر أستخدام عضو member محدد اعتمادا على النوع المستخدم.

(في مثالنا تم أستخدام العضو LoadSkin والذي هو في نفس الوقت منهج method في الصنف Skin)

ووسائط هذا الأمر هي:

name : يحمل أسم العضو (وفي هذة الحالة سيكون LoadSkin)

InvokeAttr : تم اعطاء القيمة Reflection.BindingFlags.InvokeMethod وذلك لأننا نرغب بأستخدام منهج (LoadSkin).

binder : تم تعيينها على Nothing وذلك لسماح بأستخدام DefaultBinder وهذا يعني أستخدم اعدادات النظام الأفتراضية لعملية الربط binding. ولتوضيح, مثلا اعدادات حقوق الوصول المعروفة مثل Public, Private, Protected وهكذا. وأيضا تغيير نوع Change Type. كما تعلمون فإن عنصر COM يتم بنائه بلغات غير الدوت نت مثل VC++ 6.0 أو الدلفي و غيرها. لذلك نحتاج لأخبار النظام عن كيفية تحويل أنواع البيانات data types. مثلا نوع البيانات single سيتم تحويله الي Double وذلك في حالة استخدام الخيار DefaultBinder.

target : وهو عبارة عن المثيل instance (في مثالنا SkinObj)

args : وهي مصفوفة الوسائط التي سيحتاجها العضو (وسائط العضو LoadSkin)

شباب اليس هذا رائعا :D, ان نستطيع استخدام مكونات COM في برامجنا.

هناك قصة مملة على بناء مكون .NET وأستخدامه في برنامج مكون من عدة عناصر COM :P, الا اننا لا نحتاج اليها في اغلب الأحيان ;).

... تحياتي ...

اخوكم sharp7

#3

السلام عليك اخوي

انا مبتدى ابي اعرف وشهو com

اتمنا ان يكون لها درس للمبتدئين

لو تكرمتو

اخوكم متعب

#4

وعليكم السلام :)

هلا matabaed, ال COM هو أختصار ل Component Object Model و الذي يعني نموذج الكائن المكون.

اذا COM هو ببساطة مكون يتم كتابته بعدة لغات مثل Delphi و ++C و غيرها. وهذا المكون يمكن أستخدامه في اي لغة تدعم بنية COM

يعني لو كتبت مكون COM في الدلفي, يمكنك أستخدامه في VB و كذلك VB.NET و ++C و ..... و العكس صحيح ;)

بدأ استخدام COM في الفجول بيسك منذ عام 1993 اذا لم اكن مخطئا. فتخيل اخي الكم الهائل من المكونات الذي يغرق الأسواق و كذلك الكثير من المكونات في جهازك ... اليس من الحكمة ان نستخدمها في برامجنا؟

بالمناسبة عن طريق VB.NET تستطيع انشاء مكونات من نوع .NET وهي تختلف في بنيتها عن بنية COM.

ملفات COM يمكن ان توكن DLL.* أو ocx.*

اقتباس
اتمنا ان يكون لها درس للمبتدئين

صديقي امشي مع الموظة وأكتب مكونات .NET :D

اخوك sharp7 :cool:

#5

هلابك اخوي

جزاك الله خير على هذي المعلومه

اذا امكن تدلني على مثااال بس

ابي اجربه

بامان الله

هذا الموضوع مغلق.

مواضيع مشابهة