ما هي COM / ActiveX / OCX - دليل عمليّ للفروق والعلاقات بينها

· · COM, ActiveX, OCX, OLE, تطوير Windows, تقنية قديمة

تظهر المصطلحات الثلاثة COM / ActiveX / OCX معاً عادةً في مشاريع Windows القديمة.

  • يرسل لك المورّد ملفّ .ocx
  • مكوّن غامض جالس على شاشة في Access أو VB6
  • يقول أحدهم “هذا COM”، ومباشرةً بعدها يقول آخر “إذن هو ActiveX”
  • ثمّ تبدأ مصطلحات مثل regsvr32 و 32-bit / 64-bit و IE mode بالوصول دفعة واحدة

عند هذه النقطة عادةً ما يصبح الحديث موحلاً بسرعة كبيرة.

المصطلحات قريبة بعضها من بعض، وتاريخيّاً تتداخل إلى حدّ كبير.
لكن في العمل الفعليّ، حالما تستطيع فصلها كما ينبغي، يصبح التحقيق والترحيل والشرح أسهل بكثير.

ينظّم هذا المقال ما هي COM و ما هي ActiveX و ما هي OCX بترتيب يجعل الفروق والعلاقات بينها أسهل للرؤية.
على وجه الخصوص، يوضّح أيّها هو الأساس، وأيّها هو سياق المكوّن، وأيّها هو الملفّ.

المحتويات

  1. الجواب القصير أوّلاً
  2. ما تعنيه COM / ActiveX / OCX في هذا المقال
  3. الصورة الكاملة في صفحة واحدة
    • 3.1. مخطّط العلاقات
    • 3.2. أقصر طريقة لفرز المصطلحات
  4. ما هي COM
    • 4.1. في جملة واحدة
    • 4.2. ما يهمّ في COM
  5. ما هي ActiveX
    • 5.1. في جملة واحدة
    • 5.2. ActiveX ليست محصورة بالمتصفّح
  6. ما هي OCX
    • 6.1. في جملة واحدة
    • 6.2. كيف تختلف عن .dll
  7. جدول يلخّص الفروق
  8. أين كانت تُستخدم
  9. لماذا يسهل الخلط بينها
  10. كيف نفكّر فيها في العمل الفعليّ اليوم
  11. سوء الفهم الشائع
  12. نقاط التحقّق عند التحقيق فيها
  13. الخلاصة
  14. مراجع

1. الجواب القصير أوّلاً

إذا قلتها بطريقة خشنة لكن نافعة، تبدو هكذا.

  • COM هي الأساس. إنّها العقد الثنائيّ الذي يُتيح للمكوّنات التواصل على Windows
  • ActiveX سياق مكوّن مبنيّ على COM. عمليّاً تظهر غالباً على شكل controls مضمّنة في host
  • OCX ملفّ تنفيذ كثيراً ما تراه لـ ActiveX controls. تصادفه كامتداد ملفّ
  • بكلمات أخرى، يصبح التفكير فيها أسهل كثيراً إن تعاملت مع COM = الآليّة، ActiveX = سياق المكوّن، OCX = الملفّ
  • ذكرى أنّ ActiveX = ذلك الشيء الخطير القديم في المتصفّح صحيحة جزئيّاً وناقصة جزئيّاً. ActiveX ليست محصورة بالمتصفّح
  • يتحدّث الناس غالباً وكأنّ OCX = ActiveX، لكن بدقّة هذا يخلط بين مفهوم وامتداد ملفّ
  • ليست هذه تقنيّات تضعها عادةً في قلب نظام جديد تماماً اليوم، لكنّك ما تزال تصادفها في تطبيقات Windows القائمة و Office و Access و SDKs الأجهزة وأنظمة الويب الداخليّة

لذا فأوّل شيء مهمّ هو فصل هذه الأسئلة الثلاثة.

  1. هل هذه مشكلة COM؟
  2. هل هذه مشكلة ActiveX control؟
  3. أم أنّ شخصاً يسمّيها كذلك ببساطة لأنّه رأى ملفّ .ocx؟

حالما تتّضح هذه النقطة، يتبدّد كثير من الضباب.

2. ما تعنيه COM / ActiveX / OCX في هذا المقال

تعيش هذه المصطلحات الثلاثة معاً غالباً بشكل فضفاض جدّاً في المشاريع الفعليّة.
لذا في هذا المقال، أثبّت المعنى أوّلاً.

  • COM: نموذج مكوّنات Windows نفسه. أساس الواجهات و GUIDs والتسجيل والاستدعاء
  • ActiveX: controls مبنيّة على COM وسياق الاستخدام حولها. عمليّاً، يقصد الناس غالباً ActiveX controls
  • OCX: امتداد الملفّ المُستخدَم غالباً لتنفيذ ActiveX controls: .ocx

ملاحظة إضافيّة صغيرة: تاريخيّاً، استُخدِم مصطلح ActiveX بشكل أوسع في وقت ما.
لكن حين يقول الناس ActiveX في العمل الفعليّ اليوم، الأماكن التي تؤلم عادةً تدور حول controls والتضمين والـ hosts والمتصفّحات والتسجيل.

لذا في هذا المقال أيضاً أمضي في الغالب على أنّ ActiveX = موضوع يتمحور حول ActiveX controls.

3. الصورة الكاملة في صفحة واحدة

3.1. مخطّط العلاقات

أسرع طريقة هي النظر إلى الصورة الكاملة أوّلاً.

flowchart LR
    COM["COM<br/>foundation of the binary contract"] --> OLE["OLE / Automation<br/>mechanisms for embedding and automation"]
    OLE --> AX["ActiveX<br/>control context built on COM"]
    AX --> CTRL["ActiveX controls"]
    CTRL --> OCX["OCX (.ocx)<br/>a common implementation file form"]

    HOST["Host / container<br/>IE / Access / VB6 / MFC / WinForms"] --> CTRL

النقطة الجوهريّة هنا هي أنّ COM و ActiveX ليستا الكلمة نفسها للشيء نفسه.

  • COM هي الأساس
  • OLE / Automation آليّات للتضمين والأتمتة
  • ActiveX تظهر بوصفها سياق control مبنيّ على ذلك
  • OCX ملفّ تراه كثيراً لذلك التنفيذ من جانب الـ control

لذا إن سأل أحدهم: هل ActiveX هي الشيء نفسه مثل COM؟، فالإجابة هي COM هي الأساس، لكنّ ActiveX ليست COM نفسها.

3.2. أقصر طريقة لفرز المصطلحات

المصطلح الفهم السريع
COM آليّة، عقد، أساس
ActiveX سياق المكوّنات القابلة للتضمين المبنيّة على COM
ActiveX control المكوّن الفعليّ الذي يُوضَع في host
OCX امتداد ملفّ يُستخدَم عادةً لـ ActiveX controls
OLE / Automation آليّات للتضمين والأتمتة والتكامل

إن أردت أقصر نسخة، فهذا يكفي.

  • COM هي الآليّة
  • ActiveX هي سياق المكوّن
  • OCX هي الملفّ

4. ما هي COM

4.1. في جملة واحدة

COM هي اختصار لـ Component Object Model، وهي عقد ثنائيّ لتمكين المكوّنات من التواصل بعضها مع بعض على Windows.

ما يعنيه “العقد الثنائيّ” هنا ليس شيئاً قائماً على راحة مستوى المصدر أو نحو اللغة، بل عقد واجهة يبقى ساري المفعول بعد التصريف.
السبب الذي يجعل مكوّناً مكتوباً بـ C++ قابلاً للاستخدام من لغة أخرى أو تطبيق آخر هو وجود هذا العقد.

من ناحية عمليّة، COM ليست طريقة سهلة لتوزيع المكتبات بقدر ما هي آليّة تربط الأشياء عبر العقد مع إخفاء التنفيذ.

تشمل أفكار COM النموذجيّة هذه الأمور:

  • العدّ المرجعيّ عبر IUnknown
  • اكتشاف الواجهات عبر QueryInterface
  • التعريف القائم على GUID مثل IID و CLSID
  • الاستخدام داخل العمليّة عبر DLLs
  • الاستخدام خارج العمليّة عبر EXEs

باختصار، COM هي أساس ثقافة تكوين المكوّنات في Windows.

4.2. ما يهمّ في COM

إن أردت الأساسيّات فقط، فهذه هي النقاط المهمّة في COM.

  • الواجهة أوّلاً
    • تقرّر ما تنشره قبل الحديث عن التنفيذ
  • التعريف عبر GUIDs
    • تُعرَّف الفئات والواجهات بشكل فريد
  • الفصل بين الـ host والتنفيذ
    • لا يحتاج المُستدعي إلى معرفة التنفيذ الداخليّ
  • يمكنها عبور حدود العمليّات
    • يمكن استخدامها ليس فقط في العمليّة نفسها بل أيضاً كمكوّن في عمليّة أخرى

هذا أحد الأسباب التي تجعل COM لا تُرفَض كمجرّد تقنية قديمة.
في مرحلة مبكّرة نسبيّاً، كان لديها بالفعل نموذج قويّ لـ إعادة الاستخدام القائمة على العقد.

5. ما هي ActiveX

5.1. في جملة واحدة

أسهل طريقة لفهم ActiveX هي بوصفها مكوّنات برمجيّة قابلة لإعادة الاستخدام مبنيّة على COM، وعلى وجه الخصوص controls تُضمَّن داخل host أو container وتُستخدَم هناك.

حين يقول الناس ActiveX في العمل الفعليّ، يعنون في نسبة كبيرة من الحالات ActiveX controls.
يمكن أن يشمل ذلك أشياء مثل أزرار، grids، رسومات بيانيّة، تقاويم، viewers، ومكوّنات تكامل الأجهزة.

بكلمات أخرى، من الأسهل ألّا تخطئ إن فكّرت في ActiveX ليس بوصفها تقنية ضخمة قائمة بذاتها تتظاهر بالأهمّية، بل بوصفها مكوّناً يعمل داخل host ما.

5.2. ActiveX ليست محصورة بالمتصفّح

الانطباع بأنّ ActiveX = ذلك الشيء في Internet Explorer قويّ جدّاً.
هذا ليس خطأً تماماً، لكنّه ليس القصّة الكاملة.

استُخدمت ActiveX controls أيضاً في أماكن مثل هذه:

  • نماذج Access
  • تطبيقات VB6
  • containers الـ MFC
  • سيناريوهات Office / VBA على الأطراف
  • استخدام COM wrapper من WinForms
  • Internet Explorer والبيئات الموجّهة للتوافق حوله

لذا فإنّ ActiveX ليست تقنية محصورة بالمتصفّح، بل تقنية مكوّنات استُخدمت لفترة طويلة على جانب تطبيقات Windows أيضاً.

إن فاتتك هذه النقطة، فقد تنتهي بأن ترى ActiveX control موجوداً في تطبيق ويب داخليّ و ActiveX control مضمّناً في شاشة Access كأنّهما لا علاقة لهما ببعض.
في الواقع، هما قريبان جدّاً من جانب COM.

6. ما هي OCX

6.1. في جملة واحدة

OCX هو امتداد ملفّ يُستخدَم عادةً لتنفيذ ActiveX controls.
إن وجدت .ocx في مشروع Windows، فثمّة احتمال جيّد أنّ ما تنظر إليه هو مكوّن COM من جانب الـ control المضمَّن.

على سبيل المثال، يظهر في حالات مثل هذه:

  • ملفّات تُوزَّع مع SDK مورّد
  • مشاريع VB6 / Access / MFC قديمة
  • ملفّات داخل installers تحتاج إلى التسجيل
  • مكوّنات تتطلّب regsvr32

النقطة المهمّة هنا هي أنّ OCX شكل ملفّ، لا المفهوم نفسه.
لذا إن شرحت ما هي OCX بطريقة خشنة لكن نافعة، فهي ملفّ تصادفه غالباً بوصفه الشكل الفيزيائيّ لـ ActiveX control.

6.2. كيف تختلف عن .dll

هذا مكان آخر يخلط فيه الناس بسهولة.

  • .ocx يوحي بقوّة بأنّه ActiveX control
  • .dll قد يكون مكتبة عاديّة، أو COM server، أو DLL تابع يُستخدَم حول ActiveX

لذا إن رأيت .ocx، فإنّ الحديث يميل بقوّة بالفعل نحو ActiveX، لكن إن رأيت .dll فقط، فأنت ما تزال لا تعرف بدقّة ما هو.

نمط عمليّ شائع يبدو هكذا:

  • vendorcontrol.ocx
  • vendorhelper.dll
  • vendorcore.dll

OCX هو اللاعب الرئيس، و DLLs تدعمه من الجانب.

لذا إن سأل أحدهم: هل OCX مجرّد نوع من DLL؟، فالإحساس العمليّ قريب، لكن في عمل التحقيق، الأكثر أماناً هو إبقاء أدوارهما منفصلة.

7. جدول يلخّص الفروق

المصطلح ما هو المصطلحات التي تراها كثيراً عمليّاً الشكل الفيزيائيّ الشائع
COM نموذج المكوّنات، أساس العقد الثنائيّ IUnknown, QueryInterface, CLSID, IID, Apartment .dll, .exe, معلومات التسجيل
ActiveX سياق control قائم على COM container، تضمين، خصائص، أحداث ActiveX controls
ActiveX control المكوّن القابل لإعادة الاستخدام الفعليّ الذي يُوضَع grid، تقويم، viewer، تكامل أجهزة .ocx, .dll
OCX امتداد ملفّ يُرى عادةً لـ ActiveX controls regsvr32, toolbox, 32-bit / 64-bit xxx.ocx
OLE / Automation آليّات للتضمين والأتمتة تكامل Office، صفحات الخصائص، الأتمتة ميزات متنوّعة قائمة على COM

إن تذكّرت الجدول في جملة واحدة، فهي هذه:

  • COM هي العمل التأسيسيّ
  • ActiveX هي ثقافة المكوّنات المبنيّة فوقها
  • OCX هي الملفّ الذي تلتقطه في الميدان

8. أين كانت تُستخدم

ActiveX / OCX مرتبطتان بقوّة بالمتصفّحات لدرجة أنّ الناس يرونها غالباً بوصفها تقنية ويب قديمة.
لكن في الواقع، استُخدمت أوسع من ذلك بكثير.

على سبيل المثال:

  • تطبيقات سطح المكتب
    • VB6
    • MFC / C++
    • نماذج Access
    • بيئات Office / VBA
  • المتصفّحات / أنظمة الويب الداخليّة
    • viewers مضمَّنة في Internet Explorer
    • مكوّنات التوقيع
    • مكوّنات نقل الملفّات
    • مكوّنات تكامل الأجهزة
  • تطبيقات .NET القائمة
    • ActiveX controls قائمة مغلَّفة ومستخدَمة من WinForms
    • حالات تُحفَظ فيها أصول COM القائمة على قيد الحياة كمكوّنات UI

النقطة المهمّة هنا هي أنّ ActiveX ليست تقنية مخصّصة للإنترنت فقط.
تشعر فقط وكأنّها تقنية ويب لأنّها أصبحت بارزة جدّاً في IE. في العمل العمليّ الفعليّ، من الأنسب رؤيتها بوصفها تقنية مكوّنات تضمين Windows.

9. لماذا يسهل الخلط بينها

9.1. تنتمي إلى طبقات مختلفة، لكنّها تظهر في الحديث نفسه

  • COM تتعلّق بـ الأساس
  • ActiveX تتعلّق بـ سياق المكوّن
  • OCX تتعلّق بـ الملفّ

بكلمات أخرى، هي طبقات مختلفة من البداية.
ومع ذلك تظهر معاً في المشاريع الواقعيّة نفسها، وهذا بالضبط سبب تشابك الحديث حولها.

9.2. مصطلح ActiveX واسع قليلاً

COM ثابت نسبيّاً في المعنى.
أمّا ActiveX، من ناحية أخرى، فهي أوسع قليلاً تاريخيّاً وعمليّاً.

اعتماداً على الشخص، قد تعني:

  • الـ control نفسه
  • ملفّ .ocx
  • مكوّن قديم يعمل في IE
  • المكوّنات القابلة للتضمين القائمة على COM بشكل عامّ

حالما يحدث ذلك، يصبح الحديث موحلاً بسرعة كبيرة.

9.3. لحظة يرى الناس .ocx، يريدون تسمية كلّ شيء ActiveX

هذا الدافع مفهوم.
في الحديث اليوميّ، يعمل عادةً بشكل جيّد بما يكفي.

لكن في عمل الترحيل والتحقيق، تحتاج إلى فصل أسئلة مثل هذه:

  • هل هو مكوّن UI؟
  • أيّ host يشغّله؟
  • هل يتطلّب تسجيلاً؟
  • ما وضع 32-bit / 64-bit؟
  • هل هناك اعتماد على المتصفّح؟

إن لم تفصل تلك النقاط، فمن المرجّح أن تتعثّر لاحقاً بطريقة قابلة للتنبّؤ جدّاً.

10. كيف نفكّر فيها في العمل الفعليّ اليوم

أوّلاً وقبل كلّ شيء، مجرّد العثور على COM / ActiveX / OCX ليس سبباً لرفض كلّ شيء فوراً.
لكنّ التعامل مع كلّ منها بالحرارة نفسها محفوف بالمخاطر أيضاً.

الاعتماد على ActiveX من جانب المتصفّح

هذا الجزء ينبغي أن تقيّمه بصرامة أكبر.

  • ليس جزءاً من التيّار الرئيس لتطوير المتصفّحات الحديث
  • ما زال IE mode يُناقَش في سياقات التوافق، لكن من الأفضل رؤيته بوصفه جسراً للتوافق العكسيّ
  • يصعب التوصية به كتقنية أساسيّة جديدة

بكلمات أخرى، بالنسبة لـ ActiveX من جانب الويب، عادةً ما يكون أكثر واقعيّة أن تسأل من أين تنزعها بدلاً من السؤال كيف تطيل عمرها.

الاعتماد على ActiveX / OCX من جانب سطح المكتب

يمكن الحكم على هذا الجانب بشكل أكثر براغماتيّة بقليل.

  • مستقرّ داخل الـ host القائم
  • أهداف التوزيع محدودة
  • ثمّة مسار صيانة واقعيّ من المورّد أو فريقك الخاصّ
  • الافتراضات حول التسجيل و DLLs التابعة و bitness مفهومة

إن استُوفيت هذه الشروط، فاختيار الإبقاء عليه معقول تماماً.

من ناحية أخرى، إن كنت في إحدى هذه المواقف:

  • تريد تحميل OCX بنظام 32-bit مباشرةً في جانب 64-bit
  • تريد تحديث الأجزاء المحيطة إلى .NET
  • يفشل النشر والتسجيل باستمرار
  • ما زال الاعتماد على المتصفّح قائماً

فمن الأكثر أماناً التفكير بصيغة الإبقاء / التغليف / الاستبدال كخيارات منفصلة.

لذا في العمل الفعليّ اليوم، المسألة ليست ActiveX سيّئة، بل أين تضع الحدود.
يصبح التعامل معها أسهل إن رأيتها ليس مجرّد تقنية قديمة، بل سطح اتّصال داخل نظام قائم.

11. سوء الفهم الشائع

سوء الفهم 1: COM = ActiveX

لا.
COM هي الأساس، و ActiveX سياق control مبنيّ فوقها.

سوء الفهم 2: ActiveX = Internet Explorer

لا.
أصبحت مشهورة عبر IE، لكنّ ActiveX ليست محصورة بالمتصفّح.

سوء الفهم 3: ActiveX = OCX

عمليّاً يستخدمها الناس غالباً بشكل شبه مترادف، لكن بدقّة هما مختلفتان.
تتعلّق ActiveX بالسياق أو المكوّن، و OCX هي الشكل الفيزيائيّ الذي تصادفه كامتداد ملفّ.

سوء الفهم 4: OCX مجرّد DLL، صحيح؟

هذا قريب بما يكفي للحديث الفضفاض، لكن عمل التحقيق لا ينبغي أن يبقى بهذه الفضفاضة.
لا يخبرك ملفّ .dll وحده بالكثير عن دوره، بينما يوحي .ocx بقوّة بمكوّن موجّه نحو control.

سوء الفهم 5: COM تقنية ميّتة

في عالم Windows على الأقلّ، هذه الطريقة في القول خشنة جدّاً.
تبدو أقلّ بروزاً ممّا كانت عليه، لكنّها ما تزال تظهر في سياقات التصميم وقابليّة التشغيل البينيّ.

12. نقاط التحقّق عند التحقيق فيها

حين تصادف COM / ActiveX / OCX، يصبح من الأسهل بكثير تنظيم الموقف إن تحقّقت أوّلاً من النقاط التالية.

  1. أيّ نوع من المكوّنات هو؟
    • control لـ UI؟
    • viewer؟
    • تكامل أجهزة؟
    • تكامل Office / Access؟
  2. أين يعمل؟
    • Access / VBA؟
    • VB6 / MFC؟
    • WinForms؟
    • IE / IE mode؟
  3. ما الملفّات والمعرّفات؟
    • .ocx / .dll / .exe
    • ProgID
    • CLSID
    • Type Library
  4. كيف يعمل التسجيل والتوزيع؟
    • هل يحتاج إلى regsvr32؟
    • هل توجد DLLs تابعة؟
    • هل تُطلَب صلاحيّات المسؤول؟
  5. هل يتطابق الـ bitness؟
    • 32-bit؟
    • 64-bit؟
    • هل يحتاج إلى العمل في العمليّة نفسها؟
  6. كيف ينبغي التعامل معه في المستقبل؟
    • الإبقاء عليه كما هو؟
    • وضع حدّ حوله وتغليفه؟
    • استبداله؟

إن تخطّيت هذه الأسئلة وقفزت مباشرةً إلى وجدنا ActiveX، لذا سنعيد تنفيذ كلّ شيء، فمن المرجّح جدّاً أن تدوس على الفخاخ القديمة في خطّ مستقيم أنيق.
لا حاجة لبدء جلسة انعكاسات على القدمين في حقل ألغام.

13. الخلاصة

إن شرحت الفرق بين COM / ActiveX / OCX بأخشن صيغة ما تزال نافعة في العمل الفعليّ، فهي هذه:

  • COM هي الأساس
  • ActiveX هي سياق المكوّنات القابلة للتضمين المبنيّة على COM
  • OCX هي الملفّ الذي تراه كثيراً لـ ActiveX controls

بكلمات أخرى:

  • COM هي الآليّة
  • ActiveX هي المكوّن
  • OCX هي الملفّ

حالما تستطيع إبقاء هذه الثلاثة منفصلة، يصبح من الأسهل بكثير رؤية أشياء مثل:

  • هل هذا مجرّد .ocx؟
  • هل هذه مشكلة COM أوسع؟
  • هل هذه ActiveX معتمدة على المتصفّح؟
  • هل هذا مكوّن يمكن أن يبقى على جانب سطح المكتب؟

ليست التقنية القديمة صعبة لمجرّد أنّها قديمة.
تصبح مربكة لأنّ الأساس والمكوّن والملفّ يظهرون جميعاً في الحديث نفسه.
لكن حالما تصبح البنية مرئيّة، تتحوّل إلى مشكلة يمكنك التعامل معها بهدوء أكبر ممّا قد تتوقّع.

14. مراجع

أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.

ما يجب التحقّق منه عندما لا يعمل ActiveX على Office 2024 / Microsoft 365 - الترتيب العمليّ لتغطية التعطيل الافتراضيّ، 32bit / 64bit، تسجيل COM، DLL التابعة، ووصولًا إلى IE mode

دليل عمليّ لتشخيص توقّف ActiveX على Office 2024 و Microsoft 365، يرتّب الفحوص من التعطيل الافتراضيّ إلى تطابق 32bit / 64bit وتسجيل COM وD...

ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.

الملف الشخصي للمؤلف

صفحة الملف الشخصي لمؤلف المقالة.

غو كومورا

مؤسّس شركة كومورا سوفت ذ.م.م.

يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.

روابط عامة

العودة إلى المدونة