سجل التعديلات (3 تحديثات، آخر تحديث 3 Sep، 2026)
سجل بالتغييرات التي أُجريت على هذا المقال. وحيثما حُفظت نسخة سابقة، تبقى متاحة للقراءة عبر رابط دائم يحمل معرّف DOI.
- أُضيفت روابط الاستشارة الموجودة في الأصل الياباني (consultation_services). ولم يتغيّر نصّ المقالة نفسه. قراءة النسخة السابقة لهذا التحديث (DOI: 10.5281/zenodo.22240821)
- أُعيدَت الترجمة العربية كترجمة كاملة عن النص الياباني الأصلي، وأُضيفَت خريطة المعرفة.
- أعيدت الترجمة كترجمة كاملة عن النص الياباني الأصلي. كانت النسخة العربية السابقة مختصراً يسقط أبواباً وجداول ورسوم Mermaid وتعليقات الأشكال وFAQ. أُعيدت هذه العناصر وفق الأصل الياباني، والادّعاءات التقنية مطابقة للنسخة اليابانية.
- النشر الأول
الاستشهاد بهذا المقال(DOI: 10.5281/zenodo.21621350)
هذا المقال محفوظ على Zenodo. يرد أدناه معرّف DOI الذي يشير دائمًا إلى أحدث نسخة، ومعرّف DOI المثبَّت على النسخة التي تقرؤها.
小村 豪 (2026). ما هي COM / ActiveX / OCX: الفروق والعلاقات. شركة كومورا سوفت ذ.م.م.. https://doi.org/10.5281/zenodo.21621350 https://comcomponent.com/ar/blog/2026/03/13/000-what-is-com-activex-ocx/
- DOI (أحدث نسخة)
- 10.5281/zenodo.21621350
- DOI (هذه النسخة)
- 10.5281/zenodo.22279751
الكلمات الثلاث COM / ActiveX / OCX تظهر في الغالب مجموعة في مشاريع Windows القديمة.
- يصل
.ocxمن البائع - مكوّن غامض جالس على شاشة Access أو VB6
- يُقال «هذا COM» ثمّ مباشرة «إذن هو ActiveX»
- بعد ذلك تجري كلمات
regsvr32و 32bit / 64bit و IE mode دفعة واحدة
بهذا التدفّق تتفكّك المحادثة في الغالب. المصطلحات قريبة، والتداخل التاريخيّ كبير أيضاً. بالمقابل، إن أمكن فصلها في الفهم، تغيّر سهولة التحقيق والترحيل والشرح كثيراً.
flowchart TB
accTitle: بنية تفكّك المحادثة
accDescr: ظهور مصطلحات قريبة COM و ActiveX و OCX دفعة واحدة في الميدان نفسه يفكّك المحادثة، وفصل أيّها الأساس وأيّها المكوّن وأيّها الملفّ يسهّل التحقيق والترحيل والشرح.
mix["ظهور الكلمات الثلاث دفعة واحدة"] --> lost["المحادثة لا تتلاقى"]
split["الفصل إلى أساس ومكوّن وملفّ"] --> clear["يسهل التحقيق والترحيل والشرح"]
الشكل 1: غرض هذه المقالة واحد. فصل «أيّها الأساس، وأيّها المكوّن، وأيّها الملفّ».
تنظّم هذه المقالة ما هي COM و ما هي ActiveX و ما هي OCX بترتيب تُرى فيه الفروق والعلاقات.
خصوصاً نوضّح أيّها الأساس، وأيّها المكوّن، وأيّها الملفّ.
المحتويات
- الخلاصة أوّلاً (بجملة)
- ما تعنيه COM / ActiveX / OCX في هذه المقالة
- التنظيم في صفحة واحدة أوّلاً
- 3.1. مخطّط العلاقات
- 3.2. أقصر تنظيم للمصطلحات
- ما هي COM
- 4.1. بجملة واحدة
- 4.2. ما يهمّ في COM
- 4.3. مذكّرة سطر واحد للمصطلحات
- ما هي ActiveX
- 5.1. بجملة واحدة
- 5.2. ActiveX ليست مخصّصة بالمتصفّح
- ما هي OCX
- 6.1. بجملة واحدة
- 6.2. كيف تختلف عن
.dll
- تنظيم الفروق في جدول
- أين كانت تُستخدم
- لماذا يسهل الخلط
- كيف تُفهم في العمل اليوميّ الآن
- سوء فهم شائع
- نقاط فحص عند التحقيق
- الخلاصة
- المراجع
في المخطّط، يشير الخطّ المتّصل إلى علاقة قائمة دائماً، ويشير الخطّ المتقطّع إلى علاقة مشروطة (شروط قيامها مذكورة في شرح كلّ علاقة في الصفحة التفصيليّة). القائمة الكاملة للعلاقات (المجموع 18، مع الأدلّة ودرجة اليقين) وتعريفات المفاهيم الرئيسة مجمّعة في صفحة تفاصيل خريطة المعرفة (باليابانية). البيانات: JSON-LD / Turtle
1. الخلاصة أوّلاً (بجملة)
بتعبير فجّ لكن نافع مسبقاً، هكذا.
- COM هي الأساس. عقد ثنائيّ لتبادل المكوّنات على Windows
- ActiveX سياق مكوّن مبنيّ على COM. تظهر خصوصاً كعنصر تحكّم يُضمَّن في مضيف
- OCX ملفّ تنفيذ يُرى كثيراً لعناصر تحكّم ActiveX. تصادفونه كامتداد ملفّ
- أي أنّ الرؤية تصفو بـ COM = الآليّة، ActiveX = سياق المكوّن، OCX = الملفّ تقريباً
- ذكرى
ActiveX = ذلك الشيء الخطير القديم في المتصفّحصحيحة نصفاً وناقصة نصفاً. ActiveX ليست مخصّصة بالمتصفّح - كثيراً ما يُتحدَّث عن
OCX = ActiveXكمترادفين تقريباً، لكنّ ذلك بدقّة يخلط مفهوماً بامتداد ملفّ - ليست تقنية تُجعل البطلة في تطوير جديد اليوم، لكنّها ما تزال تُصادَف في تطبيقات Windows القائمة و Office و Access و SDK الأجهزة والويب الداخليّ
يبدأ الأمر من فصل هذه الثلاثة في التفكير.
- هل ذلك حديث COM
- هل ذلك حديث عنصر تحكّم ActiveX
- هل ذلك مجرّد تسمية لأنّكم رأيتم ملفّ
.ocx
إن اتّضح هذا، ينقشع الضباب كثيراً.
flowchart TB
accTitle: الأسئلة الثلاثة التي تُفصل أوّلاً
accDescr: البدء من فصل هل الحديث أمامكم حديث آليّة COM، أم حديث مكوّن عنصر تحكّم ActiveX، أم مجرّد تسمية لأنّكم رأيتم ملفّ ocx.
q{"ماذا نتحدّث عنه الآن"}
q --> a["COM = حديث الآليّة"]
q --> b["ActiveX = حديث سياق المكوّن"]
q --> c["OCX = حديث الملفّ"]
الشكل 2: عند الحيرة ارجعوا إلى هذا الثالوث. COM آليّة، ActiveX سياق مكوّن، OCX ملفّ.
2. ما تعنيه COM / ActiveX / OCX في هذه المقالة
هذه الثلاثة كثيراً ما تتعايش بتهاون في العمل اليوميّ. لذا نثبّت المعنى أوّلاً في هذه المقالة.
- COM: نموذج المكوّنات على Windows نفسه. أساس الواجهات و GUID والتسجيل والاستدعاء
- ActiveX: عناصر تحكّم قابلة للتضمين مبنيّة على COM، أو سياق استخدامها. في العمل اليوميّ تشير غالباً خصوصاً إلى عنصر تحكّم ActiveX
- OCX: امتداد ملفّ يُرى كثيراً لتنفيذ عنصر تحكّم ActiveX.
.ocx
بملاحظة قصيرة: تاريخيّاً استُخدمت كلمة ActiveX بمعنى أوسع قليلاً في فترة.
غير أنّ كثيراً من المواضع التي تُشكل عند قول ActiveX في العمل اليوميّ الآن هي تقريباً عنصر التحكّم، والتضمين، والمضيف، والمتصفّح، والتسجيل.
لذا نمضي في هذه المقالة أيضاً أساساً بـ ActiveX = حديث أقرب إلى عنصر تحكّم ActiveX.
flowchart TB
accTitle: اتّساع كلمة ActiveX وتركيز هذه المقالة
accDescr: تاريخيّاً استُخدمت كلمة ActiveX بمعنى أوسع قليلاً، لكنّ ما يُشكل الآن في العمل اليوميّ هو عنصر التحكّم والتضمين والمضيف والمتصفّح والتسجيل، لذا تركّز هذه المقالة على الحديث الأقرب إلى عنصر التحكّم.
word["كلمة ActiveX"] --> wide["تاريخيّاً معنى أوسع أيضاً"]
word --> now["ما يُشكل الآن محيط عنصر التحكّم"]
now --> focus["هذه المقالة تمضي أقرب إلى عنصر التحكّم"]
now -.-> items["التضمين والمضيف والمتصفّح والتسجيل"]
الشكل 3: نعترف بالاتّساع التاريخيّ للكلمة، ونثبّت التركيز على «الأقرب إلى عنصر التحكّم» الذي يُشكل في العمل اليوميّ.
3. التنظيم في صفحة واحدة أوّلاً
3.1. مخطّط العلاقات
النظر أوّلاً إلى الصورة الإجماليّة في صفحة واحدة أسرع. لمن لا تظهر لديهم الرسوم، النقاط تحت المخطّط بالمحتوى نفسه، فاقرؤوها.
flowchart LR
COM["COM — أساس العقد الثنائيّ"] --> OLE["OLE / Automation — آليّة التضمين والأتمتة"]
OLE --> AX["ActiveX — سياق عنصر تحكّم مبنيّ على COM"]
AX --> CTRL["عنصر تحكّم ActiveX"]
CTRL --> OCX["OCX (.ocx) — شكل ملفّ تنفيذ يُرى كثيراً"]
HOST["مضيف / حاوية — IE / Access / VB6 / MFC / WinForms"] --> CTRL
الشكل 4: مخطّط علاقة تتراكم فيه OLE / Automation و ActiveX و OCX فوق أساس COM، ويحمّل المضيف عنصر التحكّم.
المهمّ هنا أنّ COM و ActiveX ليستا الكلمة نفسها.
- COM هي الأساس
- OLE / Automation آليّة للتضمين والأتمتة
- ActiveX تظهر كسياق عنصر تحكّم يُستخدم فوق ذلك
- OCX ملفّ يُرى كثيراً لتنفيذ ذلك عنصر التحكّم
لذا إن سُئل هل ActiveX هي COM، فالجواب الأساس COM، لكنّ ActiveX ليست COM نفسها.
3.2. أقصر تنظيم للمصطلحات
| الكلمة | الفهم الأوّل |
|---|---|
| COM | آليّة، عقد، أساس |
| ActiveX | سياق مكوّن مضمَّن مبنيّ على COM |
| عنصر تحكّم ActiveX | المكوّن نفسه الذي يُحمَّل على المضيف |
| OCX | امتداد ملفّ يُرى كثيراً لعنصر تحكّم ActiveX |
| OLE / Automation | آليّة التضمين والأتمتة والربط |
للحفظ الأقصر يكفي هذا.
- COM آليّة
- ActiveX سياق مكوّن
- OCX ملفّ
4. ما هي COM
4.1. بجملة واحدة
COM اختصار Component Object Model، وهو عقد ثنائيّ لتبادل المكوّنات على Windows.
العقد الثنائيّ هنا ليس ملاءمة الشيفرة المصدر أو مواصفات اللغة، بل واجهة تُحفَظ فيها الوعود حتّى بعد التجميع. إمكان استخدام مكوّن مصنوع بـ C++ من لغة أخرى أو تطبيق آخر يأتي من وجود هذا العقد.
بتقريب الإحساس العمليّ، COM ليست طريقة توزيع مكتبة مريحة بقدر ما هي آليّة تخفي التنفيذ وتربط بالعقد وحده.
مثلاً هذا النطاق نموذجيّ لـ COM (معنى كلّ كلمة ملخّص سطراً في 4.3).
- عدّ مرجع بـ
IUnknown - استكشاف الواجهة بـ
QueryInterface - تحديد قائم على GUID مثل
IIDوCLSID - استخدام داخل العمليّة بـ DLL
- استخدام خارج العمليّة بـ EXE
بمعنى آخر، COM أساس ثقافة المكوّنات على Windows.
flowchart TB
accTitle: فكرة العقد الثنائيّ
accDescr: COM تربط المكوّنات بعقد ثنائيّ تُحفَظ فيه الوعود حتّى بعد التجميع، لا بملاءمة الشيفرة المصدر أو مواصفات اللغة، لذا يمكن استخدام مكوّن مصنوع بـ C++ من لغة أخرى أو تطبيق آخر.
part["مكوّن (التنفيذ مخفيّ)"] --> contract["عقد ثنائيّ (الوعد المكشوف)"]
contract --> user["لغة أخرى أو تطبيق آخر"]
contract -.-> note["الوعد يُحفَظ بعد التجميع أيضاً"]
الشكل 5: جوهر COM «الإخفاء للتنفيذ والربط بالعقد وحده». لذلك تُستخدم المكوّنات عبر اللغات.
4.2. ما يهمّ في COM
إن ضبطتم الأساسيّات فقط، فما يلي مهمّ في COM.
- التركيز على الواجهة
- تُقرَّر ماذا يُكشف قبل التنفيذ
- التحديد بـ GUID
- يُحدَّد الصنف والواجهة فريداً
- فصل المضيف عن التنفيذ
- جهة الاستدعاء لا تحتاج معرفة التنفيذ الداخليّ
- إمكان عبور العمليّات
- لا العمليّة نفسها فقط، بل كمكوّن في عمليّة منفصلة أيضاً
هذا النطاق هو سبب عدم إنهاء COM كتقنية قديمة فحسب. من عصر مبكّر جدّاً كانت تحمل تصميم إعادة استخدام قائم على العقد بثبات.
flowchart TB
accTitle: أربعة أعمدة مهمّة في COM
accDescr: التصميم المركّز على الواجهة، والتحديد الفريد بـ GUID، وفصل المضيف عن التنفيذ، وإمكان عبور العمليّات، هذه الأربع تجعل COM تصميم إعادة استخدام قائم على العقد.
com["أساسيّات COM"] --> p1["التركيز على الواجهة"]
com --> p2["التحديد بـ GUID"]
com --> p3["فصل المضيف عن التنفيذ"]
com --> p4["إمكان عبور العمليّات"]
الشكل 6: أربعة أعمدة تسند COM. من عصر مبكّر حملت تصميم إعادة استخدام قائم على العقد.
4.3. مذكّرة سطر واحد للمصطلحات
في حديث COM تطير الكلمات التالية بلا شرح. هنا كمدخل للمفهوم نضبط سطراً واحداً لكلّ منها أوّلاً. لمن يريد الغوص حتى متعة التصميم، انظروا ما هي COM: لماذا ما يزال تصميم Windows COM جميلاً.
| المصطلح | المعنى في سطر واحد |
|---|---|
| الواجهة | صفّ دوالّ يعد المكوّن بـ «يمكن استدعاء هذه». مفصولة عن التنفيذ |
IUnknown |
الواجهة التي تصير أساس كلّ واجهات COM. تحمل الثلاثة فقط: QueryInterface / AddRef / Release |
QueryInterface |
ميثود تسأل المكوّن الذي بأيديكم «هل تحمل هذه الواجهة أيضاً». إن حملها يُعاد مؤشّرها |
| عدّ المرجع | عدّاد يعدّ عدد المستخدمين. يزيد بـ AddRef وينقص بـ Release، ويُحرَّر المكوّن عند الصيرورة 0 |
| GUID | اختصار Globally Unique Identifier، معرّف 128 bit يُكتب بشكل {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}. يُستخدم لتجنّب تصادم الأسماء |
| CLSID | اختصار Class ID، GUID يشير إلى «أيّ مكوّن (صنف)». تسجيل السجلّ يُدار بهذا القيمة أيضاً |
| IID | اختصار Interface ID، GUID يشير إلى «أيّ واجهة» |
| ProgID | اسم بديل موجّه للإنسان أُلحق بـ CLSID. سلسلة مثل Excel.Application تُستخدم للإشارة إلى المكوّن من سكربتات وغيرها |
| Type Library | بيانات تجمع معلومات أنواع الواجهات والميثودات التي يكشفها المكوّن. يقرأها VB6 أو .NET عند الإشارة إلى المكوّن |
| Apartment (STA / MTA) | أسلوب خيوط COM. STA اتّفاق «يُستدعى ذلك المكوّن من خيط واحد فقط»، و MTA «يجوز الاستدعاء المتزامن من عدّة خيوط»، ومكوّنات الواجهة تقريباً في جانب STA |
هذه المقالة تصل إلى تنظيم المفهوم، لذا لا نغوص في تفاصيل كلّ بند. عندما يصير حديث التنفيذ لازماً، استخدام كلمات هذا الجدول كما هي كمصطلحات بحث يسهّل الإصابة.
flowchart TB
accTitle: العمل الأساسيّ القائم على IUnknown
accDescr: IUnknown أساس كلّ واجهات COM تحمل عملاً أساسيّاً: السؤال عن واجهة أخرى بـ QueryInterface، وزيادة عدّ المرجع ونقصه بـ AddRef و Release، وتحرير المكوّن عند الصيرورة 0.
iu["IUnknown (أساس الكلّ)"] --> qi["السؤال بـ QueryInterface"]
qi --> got["إن حملها يُعاد المؤشّر"]
iu --> rc["إدارة العدد بـ AddRef و Release"]
rc --> zero["عند 0 يُحرَّر المكوّن"]
الشكل 7: ميثودات IUnknown الثلاث في مركز جدول المصطلحات تنقسم إلى عملين: «السؤال» و«العدّ».
5. ما هي ActiveX
5.1. بجملة واحدة
ActiveX أسهل فهماً كـ مكوّن برمجيّ قابل لإعادة الاستخدام مبنيّ على COM، خصوصاً كـ عنصر تحكّم يُضمَّن في مضيف أو حاوية.
قول ActiveX في العمل اليوميّ حديث عنصر تحكّم ActiveX باحتمال كبير جدّاً.
مثلاً ينطبق زرّ، أو شبكة، أو رسم بيانيّ، أو تقويم، أو عارض، أو مكوّن ربط أجهزة.
ActiveX ليست تقنية عملاقة تقف وحدها بتعاظم بقدر ما يصعب الانحراف إن اعتُبرت مكوّناً يعمل مضمَّناً داخل مضيف ما.
flowchart TB
accTitle: مكوّن يعمل مضمَّناً في مضيف
accDescr: قول ActiveX في العمل اليوميّ حديث عنصر تحكّم ActiveX باحتمال كبير، ويشير إلى مكوّن يعمل مضمَّناً في مضيف أو حاوية مثل زرّ أو شبكة أو رسم بيانيّ أو عارض أو مكوّن ربط أجهزة.
host["مضيف / حاوية"] --> ctrl["عنصر تحكّم ActiveX"]
ctrl --> ex1["شبكة أو تقويم"]
ctrl --> ex2["عارض أو مكوّن ربط أجهزة"]
ctrl -.-> note["ليست تقنية عملاقة تقف وحدها"]
الشكل 8: اعتبار ActiveX «مكوّناً يعمل مضمَّناً» يصعّب الانحراف.
5.2. ActiveX ليست مخصّصة بالمتصفّح
انطباع ActiveX = شيء Internet Explorer قويّ جدّاً.
هذا ليس خطأ، لكنّه ليس ذلك فقط.
نذكر مواضع استُخدمت فيها عناصر تحكّم ActiveX.
- نماذج Access
- تطبيقات VB6 (Visual Basic 6.0)
- حاويات MFC (مكتبة Microsoft Foundation Class)
- محيط Office / VBA
- استخدام أغلفة COM من WinForms
- Internet Explorer وسياق تشغيل توافقه
أي أنّ ActiveX ليست تقنية متصفّح حصراً، بل تقنية مكوّنات استُخدمت طويلاً في جانب تطبيقات Windows أيضاً.
إن لم يتّضح هذا، تنظرون إلى ActiveX الموجود في ويب داخليّ و ActiveX المدفون في شاشة Access كأنّهما شيئان مختلفان. فعليّاً كلاهما أقرباء قريبان جدّاً من COM.
flowchart TB
accTitle: مواضع استُخدمت فيها عناصر تحكّم ActiveX
accDescr: نماذج Access وتطبيقات VB6 وحاويات MFC ومحيط Office و VBA واستخدام أغلفة COM من WinForms و Internet Explorer: ActiveX ليست مخصّصة بالمتصفّح واستُخدمت طويلاً في جانب تطبيقات Windows أيضاً.
ax["عنصر تحكّم ActiveX"] --> d["Access أو VB6 أو MFC"]
ax --> o["محيط Office أو VBA"]
ax --> w["غلاف COM في WinForms"]
ax --> ie["عالم Internet Explorer"]
ie -.-> myth["الشهرة هنا فقط"]
الشكل 9: برزت في IE فحسب، ومعظم مواضع الاستخدام في جانب تطبيقات Windows.
6. ما هي OCX
6.1. بجملة واحدة
OCX امتداد ملفّ يُستخدم كثيراً لتنفيذ عنصر تحكّم ActiveX.
إن عثرتم على .ocx في ميدان Windows، فيجوز الاشتباه أوّلاً بـ مكوّن COM من نوع عنصر تحكّم مضمَّن.
مواضع الظهور تقريباً هذا النطاق.
- توزيعات SDK البائع
- مشاريع VB6 / Access / MFC قديمة
- ملفّ تسجيل ضمن المثبِّت
- مكوّن يحتاج
regsvr32
ما ينبغي ضبطه أنّ OCX شكل ملفّ، لا المفهوم نفسه.
لذا إن قيل ما هي OCX بتهاون، فهي ملفّ يُصادَف كثيراً ككيان عنصر تحكّم ActiveX.
6.2. كيف تختلف عن .dll
هذا أيضاً موضع يسهل الاختلاط فيه.
.ocxيوحي بقوّة أنّه عنصر تحكّم ActiveX.dllقد تكون مكتبة عاديّة، أو خادم COM، أو DLL معتمدة حول ActiveX
رؤية .ocx تكفي لإصابة أنّ الحديث أقرب إلى ActiveX، أمّا رؤية .dll وحدها فلا تكفي لمعرفة ما هو بعد.
الشائع في العمل اليوميّ نمط يصطفّ فيه:
vendorcontrol.ocxvendorhelper.dllvendorcore.dll
ويكون البطل OCX، وتسنده DLL.
لذا إن سُئل هل OCX نوع من DLL، فالإحساس قريب، لكنّ في التحقيق الأأمن فصل الأدوار.
flowchart TB
accTitle: فرق المعلومات المقروءة من الامتداد
accDescr: ocx يوحي بقوّة أنّه عنصر تحكّم ActiveX، أمّا dll فلا يُعرف بعد إن كانت مكتبة عاديّة أو خادم COM أو DLL معتمدة. في العمل اليوميّ شائع نمط تسند فيه DLL البطل OCX.
q{"ما الامتداد"}
q -->|".ocx"| ax["إصابة أنّه أقرب إلى ActiveX"]
q -->|".dll"| unk["لا يُعرف ما هو بعد"]
unk --> roles["مكتبة أم خادم COM أم معتمدة"]
ax -.-> pair["شكل تسند فيه DLL البطل OCX"]
الشكل 10: .ocx يتيح الإصابة، أمّا .dll فلا يُعرف ما هي حتى تُحقَّق الأدوار.
7. تنظيم الفروق في جدول
| الكلمة | ما هي | كلمات تُرى كثيراً في العمل اليوميّ | الكيان الشائع |
|---|---|---|---|
| COM | نموذج مكوّنات، أساس العقد الثنائيّ | IUnknown, QueryInterface, CLSID, IID, Apartment |
.dll, .exe, معلومات التسجيل |
| ActiveX | سياق عنصر تحكّم مبنيّ على COM | حاوية، تضمين، خصائص، أحداث | عنصر تحكّم ActiveX |
| عنصر تحكّم ActiveX | مكوّن قابل لإعادة الاستخدام يُوضَع فعليّاً | شبكة، تقويم، عارض، ربط أجهزة | .ocx, .dll |
| OCX | امتداد ملفّ يُرى كثيراً لعنصر تحكّم ActiveX | regsvr32, صندوق الأدوات, 32bit / 64bit |
xxx.ocx |
| OLE / Automation | آليّة التضمين والأتمتة | ربط Office، صفحات خصائص، أتمتة | وظائف متنوّعة مبنيّة على COM |
للحفظ من هذا الجدول أوّلاً هكذا.
- COM أعمال الأساس
- ActiveX ثقافة مكوّنات تركب فوقه
- OCX ملفّ تلتقطونه في الميدان
8. أين كانت تُستخدم
ActiveX / OCX ذاكرة المتصفّح فيهما أقوى من اللازم، فيبدوان تقنية ويب قديمة.
غير أنّهما استُخدمتا فعليّاً على نطاق أوسع.
مواضع ملموسة كهذه.
- تطبيقات سطح المكتب
- VB6
- MFC / C++
- نماذج Access
- محيط Office / VBA
- المتصفّح / الويب الداخليّ
- عارض يُضمَّن في Internet Explorer
- مكوّن توقيع
- مكوّن نقل ملفّات
- مكوّن ربط أجهزة محيطة
- تطبيقات .NET قائمة
- عناصر تحكّم ActiveX قائمة تُستخدم بغلاف من WinForms
- حالات تمديد عمر أصل COM قائم كمكوّن واجهة
هنا أيضاً نعود في النهاية إلى أنّ ActiveX ليست مخصّصة بالإنترنت. برزت في IE فبدت تقنية ويب، أمّا الواقع فالنظر إليها كـ تقنية مكوّنات مضمَّنة على Windows أوقع في العمل اليوميّ.
flowchart TB
accTitle: انزياح المظهر عن الواقع
accDescr: بروزها في IE يجعل ActiveX تبدو تقنية ويب قديمة، لكنّها استُخدمت فعليّاً على نطاق واسع في تطبيقات سطح المكتب والويب الداخليّ وتطبيقات .NET القائمة، والواقع تقنية مكوّنات مضمَّنة على Windows.
look["ذاكرة البروز في IE"] --> web["تبدو تقنية ويب قديمة"]
real["مواضع الاستخدام الفعليّة"] --> r1["تطبيقات سطح المكتب"]
real --> r2["المتصفّح والويب الداخليّ"]
real --> r3["تطبيقات .NET قائمة"]
r1 -.-> truth["الواقع تقنية مكوّنات مضمَّنة على Windows"]
الشكل 11: انزياح مظهر «تقنية ويب قديمة» عن واقع «تقنية مكوّنات مضمَّنة على Windows».
9. لماذا يسهل الخلط
9.1. طبقات الكلمات مختلفة، لكنّها تظهر في المحادثة نفسها
- COM حديث الأساس
- ActiveX حديث سياق المكوّن
- OCX حديث الملفّ
الطبقات مختلفة أصلاً، لكنّها في العمل اليوميّ تظهر معاً في الميدان نفسه، فتميل المحادثة إلى التعكّر.
9.2. كلمة ActiveX أوسع قليلاً
معنى COM ثابت نسبيّاً.
أمّا ActiveX فتُستخدم أوسع قليلاً تاريخيّاً وعمليّاً.
حسب الشخص ينزاح ما يُشار إليه إلى واحد من:
- عنصر التحكّم نفسه
- ملفّ
.ocx - مكوّن قديم يعمل في IE
- مكوّنات مضمَّنة مبنيّة على COM عموماً
عند هذه النقطة لم تعد المحادثة تتلاقى أصلاً.
9.3. لحظة رؤية .ocx تغري بتسمية الكلّ ActiveX
هذا الإحساس مفهوم. في العادة يكفي للتفاهم تقريباً.
غير أنّه في مواضع الترحيل والتحقيق، إن لم تُفصل:
- هل هو مكوّن واجهة
- في أيّ مضيف يعمل
- هل التسجيل لازم
- كيف حال 32bit / 64bit
- هل ثمّة اعتماد على المتصفّح
فسوف تسقطون سقوطاً صحيحاً لاحقاً.
flowchart TB
accTitle: ثلاثة أسباب للخلط
accDescr: ظهور حديث بطبقات مختلفة في المحادثة نفسها، واتّساع كلمة ActiveX قليلاً، والرغبة في تسمية الكلّ ActiveX لحظة رؤية ocx، هذه الثلاثة سبب الخلط.
r1["حديث بطبقات مختلفة في المحادثة نفسها"] --> mixup["تعكّر المحادثة"]
r2["كلمة ActiveX أوسع"] --> mixup
r3["رؤية ocx وتسمية الكلّ كذلك"] --> mixup
mixup -.-> risk["السقوط في مواضع الترحيل والتحقيق"]
الشكل 12: هويّة الخلط ظهور طبقات مختلفة — أساس ومكوّن وملفّ — معاً في الميدان نفسه.
10. كيف تُفهم في العمل اليوميّ الآن
أوّلاً، العثور على COM / ActiveX / OCX لا يلزم النفي الشامل فوراً. غير أنّ معاملة الكلّ بالحرارة نفسها خطرة أيضاً.
اعتماد ActiveX في جانب المتصفّح
هنا الأأمن النظر بتشدّد ذي أولويّة.
- ليست التيّار الرئيس لتطوير المتصفّحات الحديثة
- في سياق التشغيل المتوافق يصير IE mode موضوع حديث، لكنّ الأفضل النظر إليه كـ جسر للتوافق الخلفيّ
- يصعب التوصية بالإمساك به كتقنية افتراض جديدة
الحكم يحتاج محور الزمن أيضاً. تطبيق سطح مكتب IE11 متقاعد أصلاً، والركيزة الباقية الآن هي IE mode في Microsoft Edge. حول ذلك IE mode أعلنت Microsoft سياسة الدعم حتى 2029 على الأقلّ، والإعلان قبل سنة عند الإلغاء. أي أنّ 2029 ليست «أجلاً يجوز الإهمال حتى ذلك الحين»، بل موضوع حساب عكسيّ كـ أجل إنهاء النزع حتى ذلك الحين. خطوات النزع نفسها مكتوبة منفصلة في دليل الخروج من أنظمة تعتمد IE mode.
ActiveX في جانب الويب أوقع التفكير فيه بـ «من أين يُنزع» أكثر من «كيف يُمدَّد عمره».
flowchart TB
accTitle: محور زمن ActiveX في جانب المتصفّح
accDescr: تطبيق سطح مكتب IE11 متقاعد، والركيزة الباقية IE mode في Edge، وأعلنت Microsoft سياسة الدعم حتى 2029 على الأقلّ والإعلان قبل سنة عند الإلغاء. 2029 ليست أجلاً يجوز الإهمال بل تُحسب عكسياً كأجل إنهاء النزع.
ie11["سطح مكتب IE11 متقاعد"] --> iem["الركيزة الباقية IE mode في Edge"]
iem --> y2029["الدعم حتى 2029 على الأقلّ"]
y2029 --> plan["الحساب العكسيّ كأجل إنهاء النزع"]
y2029 -.-> notice["سياسة الإعلان قبل سنة عند الإلغاء"]
الشكل 13: 2029 ليست مهلة بل موعد نهائيّ. جانب المتصفّح يُفكَّر فيه بـ «من أين يُنزع».
اعتماد ActiveX / OCX في جانب سطح المكتب
هنا يمكن الحكم بواقعيّة أكبر قليلاً.
- يعمل بثبات داخل مضيف قائم
- جهة التوزيع محدودة
- ثمّة أفق لصيانة البائع أو صيانة داخليّة
- افتراضات التسجيل و DLL المعتمدة و bitness مفهومة
إن اكتملت هذه الشروط، فقرار الإبقاء شائع.
في المقابل، إن كان:
- المراد تحميل OCX بـ 32bit كما هو في جانب 64bit
- المراد نقل المحيط فقط إلى .NET
- السقوط في كلّ مرّة عند النشر والتسجيل
- بقاء اعتماد على المتصفّح
فالأأمن فصل التفكير إلى الإبقاء / التغليف / الاستبدال.
ما يُسأل في العمل اليوميّ الآن ليس هل سيّئ لأنّه ActiveX، بل أين يُصنع الحدّ.
أسهل تعاملاً إن نُظر إليه كـ سطح وصل لنظام قائم أكثر من تقنية قديمة.
flowchart TB
accTitle: تفرّع الحكم في جانب سطح المكتب
accDescr: إن اكتمل العمل المستقرّ والتوزيع المحدود وأفق الصيانة وفهم الافتراضات فقرار الإبقاء شائع، وإن وُجد تصادم bitness أو نقل المحيط إلى .NET أو حوادث نشر أو اعتماد متصفّح فُصل التفكير إلى الإبقاء والتغليف والاستبدال.
q{"هل اكتملت الشروط"}
q -->|"العمل المستقرّ وفهم الافتراضات مكتملان"| keep["قرار الإبقاء شائع أيضاً"]
q -->|"ثمّة مواضع تعثّر"| split["فصل الإبقاء والتغليف والاستبدال"]
split -.-> view["أين يُصنع الحدّ كسطح وصل"]
الشكل 14: جانب سطح المكتب يُحكم بفصل الحرارة. ما يُسأل ليس الخير والشرّ بل موضع الحدّ.
11. سوء فهم شائع
سوء الفهم 1: COM = ActiveX
خطأ. COM هي الأساس، و ActiveX سياق عنصر تحكّم يُستخدم فوقه.
سوء الفهم 2: ActiveX = Internet Explorer
خطأ. اشتهرت في IE وهذا واقع، لكنّ ActiveX ليست مخصّصة بالمتصفّح.
سوء الفهم 3: ActiveX = OCX
في العمل اليوميّ تُستخدمان بمعنى قريب جدّاً، لكنّهما بدقّة مختلفتان. ActiveX حديث سياق أو مكوّن، و OCX كيان يُصادَف كامتداد ملفّ.
سوء الفهم 4: OCX مجرّد DLL فحسب
بتهاون قريب، لكنّ في التحقيق الأفضل عدم التهاون.
.dll وحدها لا تُقرأ أدوارها، أمّا .ocx فرائحتها أقرب إلى عنصر التحكّم بقوّة.
سوء الفهم 5: COM تقنية ميّتة
على الأقلّ في عالم Windows، هذا التعبير فجّ. تبدو قد نزلت قليلاً عن المسرح الأماميّ فحسب، وفي سياق التصميم والتوافق المتبادل ما تزال تظهر اليوم.
flowchart TB
accTitle: تصحيح سوء الفهم الشائع
accDescr: COM ليست ActiveX نفسها بل الأساس، و ActiveX ليست مخصّصة بـ IE، و ActiveX و OCX فرق مفهوم وملفّ، و COM ليست تقنية ميّتة.
m1["COM = ActiveX ؟"] --> a1["COM أساس وشيء آخر"]
m2["ActiveX مخصّصة بـ IE ؟"] --> a2["نشطة على سطح المكتب أيضاً"]
m3["ActiveX = OCX ؟"] --> a3["فرق المفهوم والملفّ"]
m4["COM ميّتة ؟"] --> a4["ما تزال تظهر في التوافق المتبادل"]
الشكل 15: سوء الفهم الخمسة كلّها يولد من خلط فرق الطبقات.
12. نقاط فحص عند التحقيق
عند العثور على COM / ActiveX / OCX، التحقّق من هذا النطاق بالترتيب يصعّب التيه.
- ما نوع المكوّن
- عنصر تحكّم واجهة
- عارض
- ربط أجهزة
- ربط Office / Access
- أين يعمل
- Access / VBA
- VB6 / MFC
- WinForms
- IE / IE mode
- ما الملفّ والمعرّفات
.ocx/.dll/.exe- ProgID
- CLSID
- Type Library
- كيف التسجيل والنشر
- هل
regsvr32لازم - هل ثمّة DLL معتمدة
- هل امتيازات المدير لازمة
- هل
- هل يتطابق bitness
- 32bit أم
- 64bit
- هل يلزم العمل في العمليّة نفسها
- كيف يُعامل مستقبلاً
- الإبقاء كما هو
- صنع حدّ والتغليف
- الاستبدال
12.1. بماذا تُحقّقون
النقاط الستّ أعلاه «ماذا يُنظر»، لذا نرتّب أيضاً «أين يُفتح». إن لم تُعرف هذه، تتوقّفون عند الخطوة الأولى رغم وجود قائمة الفحص.
| المراد معرفته | الأداة المستخدمة / الموضع المنظور |
|---|---|
هل ذلك .dll / .ocx خادم COM يمكنه التسجيل الذاتيّ |
بـ dumpbin /exports اسم_الملف المرفق مع Visual Studio، إن صُدِّر DllRegisterServer فهو خادم COM من نوع التسجيل الذاتيّ. regsvr32 يستدعي هذه الدالّة |
| طريقة التسجيل والإلغاء | التسجيل بـ regsvr32 اسم_الملف، والإلغاء بـ regsvr32 /u اسم_الملف. تلزم امتيازات المدير. على Windows بـ 64bit، %SystemRoot%\System32\regsvr32.exe لـ 64bit، و %SystemRoot%\SysWOW64\regsvr32.exe لـ 32bit، فيُختاران وفق bitness المكوّن |
| جلب ملفّ الكيان من CLSID | القيمة الافتراضيّة لـ HKEY_CLASSES_ROOT\CLSID\{CLSID}\InprocServer32 في السجلّ هي مسار خادم داخل العمليّة (DLL / OCX). لمكوّن خارج العمليّة انظروا LocalServer32 |
| جلب CLSID من ProgID | القيمة الافتراضيّة لـ HKEY_CLASSES_ROOT\اسم_ProgID\CLSID هي CLSID. يمكن أيضاً النظر إلى المفتاح الفرعيّ ProgID من جانب CLSID عكسياً |
| موضع تسجيل مكوّن 32bit | على Windows بـ 64bit، تسجيل 32bit يدخل تحت HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID. لا تحكموا بـ «غير مسجّل» بالنظر إلى جانب 64bit وحده |
| تعداد الواجهات المكشوفة | إن وُجد OLE/COM Object Viewer (oleview.exe) ضمن Windows SDK، يمكن تعداد الأصناف المسجّلة و Type Library. قد لا يُرفق حسب إصدار SDK، فإن غاب فتتبّعوا من السجلّ وإعدادات الإشارة في بيئة التطوير |
| bitness جانب المضيف | في علامة تبويب «التفاصيل» في مدير المهام، انقروا بزرّ الفأرة الأيمن على عنوان العمود وأضيفوا عمود «المنصّة»، فيتبيّن لكلّ عمليّة إن كانت 32 بت أم 64 بت. OCX بـ 32bit لا يُحمَّل مباشرةً في عمليّة 64bit |
| فشل حلّ التسجيل أو DLL المعتمدة | تتبّع الوصول إلى السجلّ والملفّات بـ Process Monitor يُظهر أيّ مفتاح أو أيّ DLL فشل البحث عنه. طريقة الاستخدام ملخّصة في دليل عمليّ لـ Process Monitor (ProcMon) |
الجري بـ ثمّة ActiveX فننفّذ الكلّ من جديد دون النظر إلى هذا النطاق يدوس الفخّ القديم بنظافة.
الأأمن ملء النقاط الستّ أعلاه وتقابل الأدوات أوّلاً، ثمّ تقرير «الإبقاء / التغليف / الاستبدال» في الفصل 10.
flowchart TB
accTitle: ترتيب التحقيق
accDescr: التحقّق بالترتيب من نوع المكوّن، وأين يعمل، والملفّ والمعرّفات، والتسجيل والنشر، وتطابق bitness، ثمّ تقرير الإبقاء أو التغليف أو الاستبدال.
s1["النظر إلى نوع المكوّن"] --> s2["النظر إلى أين يعمل"]
s2 --> s3["جرد الملفّ والمعرّفات"]
s3 --> s4["التحقّق من التسجيل والنشر"]
s4 --> s5["التحقّق من bitness"]
s5 --> s6["تقرير الإبقاء أو التغليف أو الاستبدال"]
الشكل 16: الأأمن عدم الجري فوراً إلى تنفيذ جديد، وملء هذا الترتيب ثمّ تقرير الاتّجاه.
13. الخلاصة
إن قيل فرق COM / ActiveX / OCX بأكثر تعبير فجّ، لكن بشكل نافع في العمل اليوميّ، فهكذا.
- COM هي الأساس
- ActiveX سياق مكوّن مضمَّن مبنيّ على COM
- OCX ملفّ يُرى كثيراً لعنصر تحكّم ActiveX
حين تصيرون قادرين على فصل هذه الثلاثة في التفكير، يصير أسهل رؤية بكثير:
- هل هذا مجرّد
.ocx - هل هي مشكلة COM كلّها
- هل هو ActiveX يعتمد على المتصفّح
- هل هو مكوّن يمكن إبقاؤه على سطح المكتب
التقنية القديمة ليست صعبة لأنّ الاسم قديم، بل معقّدة لأنّ الأساس والمكوّن والملفّ تظهر في المحادثة نفسها. غير أنّه إن ظهرت البنية، تصير مشكلة قابلة للمعالجة على نحو مفاجئ.
14. مراجع
- مدوّنة شركة كومورا سوفت, ما هي COM: لماذا ما يزال تصميم Windows COM جميلاً
- مدوّنة شركة كومورا سوفت, كيف تتعامل مع ActiveX / OCX اليوم: جدول قرار للإبقاء أو التغليف أو الاستبدال
- Microsoft Learn, Component Object Model (COM)
- Microsoft Learn, ActiveX Controls - Win32 apps
- Microsoft Learn, ActiveX Controls - MFC
- Microsoft Learn, ActiveX Control - Access VBA
- Microsoft Learn, What is Internet Explorer (IE) mode?
- Microsoft Learn, Internet Explorer and Microsoft Edge lifecycle FAQ (سياسة دعم IE mode حتى 2029 على الأقلّ)
- Microsoft Learn, regsvr32 - Windows Commands
- Microsoft Learn, CLSID Key - Win32 apps
- Microsoft Learn, Registry Redirector - Win32 apps
- Microsoft Learn, Use DevTools in Internet Explorer mode (IE mode)
مقالات ذات صلة
أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.
فخاخ التسجيل وbitness في تطوير COM و OCX / ActiveX
نرتّب من منظور عمليّ ما يسهل التعثّر فيه في تطوير COM و OCX و ActiveX: 32-bit/64-bit، Visual Studio 2022، regsvr32/Regasm، صلاحيات المسؤو...
كيف تتعامل مع ActiveX / OCX اليوم - جدول قرار للإبقاء أو التغليف أو الاستبدال
عند العثور على ActiveX أو OCX، يبيّن المقال كيف تختار بين الإبقاء والتغليف والاستبدال، مع 32bit / 64bit والتسجيل واعتماد المتصفّح وصيانة ...
ما كائن OLE؟ ── آلية التضمين والربط ومطبّات مستندات الأعمال
حقيقة ميزة تضمين جدول Excel في Word هي كائن OLE. نشرح الفرق بين التضمين والربط، والملفّ المركَّب والتخزين المنظَّم، وآلية In-Place Activa...
كيف تعمل الحافظة والسحب والإفلات ── معالجة نقل بيانات OLE بشكل صحيح في تطبيقات الأعمال
لماذا ينهار لصق Excel ويفشل اللصق بعد إغلاق المصدر: تنسيقات الحافظة، والعرض المؤجَّل، وسحب وإفلات OLE، وسياسات السجلّ ومزامنة السحابة.
ما ينبغي تنظيمه قبل طلب التعهيد أو التطوير التعاقديّ لتطبيق Windows
قبل تكليف جهة خارجية بتطوير تطبيق Windows تعاقديّاً، إليك النقاط التي ينبغي تنظيمها: تعديل البرمجيّات القائمة، وتكامل الأجهزة، وCOM/Activ...
أين يتصل هذا الموضوع
ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.
دعم إعادة استخدام الأصول القديمة وترحيلها
ترتيب الفروق بين COM / ActiveX / OCX مدخل مناسب للتفكير في كيفية الاستفادة من الأصول القائمة وكيفية ترحيلها.
الاستشارات التقنية ومراجعة التصميم
إن كان المشروع ممّا تريد فيه توحيد معاني المصطلحات والحدود أوّلاً ثمّ تحديد السياسة، فيمكن المضيّ في الترتيب ضمن الاستشارة التقنيّة ومراجعة التصميم.
الأسئلة الشائعة
أسئلة شائعة حول موضوع هذه المقالة.
- ما هو ملف OCX؟
- OCX امتداد ملف يُستخدم كثيراً لتنفيذ عنصر تحكّم ActiveX. إن عثرتم على .ocx في ميدان Windows، فيجوز الاشتباه أوّلاً بمكوّن COM من نوع عنصر تحكّم مضمَّن. كثيراً ما يظهر كتوزيع SDK بائع، أو مشروع VB6 / Access / MFC قديم، أو ملف تسجيل ضمن المثبِّت، أو مكوّن يحتاج regsvr32. ضبط أنّ OCX شكل ملفّ لا المفهوم نفسه يصعّب الاختلاط.
- ما الفرق بين COM و ActiveX؟
- COM عقد ثنائيّ لتبادل المكوّنات على Windows، أي الأساس. ActiveX مكوّن برمجيّ قابل لإعادة الاستخدام مبنيّ على COM، وغالباً يشير إلى سياق عنصر تحكّم يُضمَّن في مضيف أو حاوية. الرؤية تصفو بـ «COM = الآليّة، ActiveX = سياق المكوّن، OCX = الملفّ». أساس ActiveX هو COM، لكنّ ActiveX ليس COM نفسه.
- هل ActiveX تقنية مخصّصة لـ Internet Explorer؟
- لا. اشتهرت في IE وهذا واقع، لكنّ عناصر تحكّم ActiveX استُخدمت طويلاً أيضاً في جانب تطبيقات Windows: نماذج Access، وتطبيقات VB6، وحاويات MFC، ومحيط Office / VBA، واستخدام أغلفة COM من WinForms. ليست تقنية متصفّح حصراً، والنظر إليها كتقنية مكوّنات مضمَّنة على Windows أوقع في العمل اليوميّ. اعتماد ActiveX في جانب المتصفّح اليوم أوقع التفكير فيه بـ «من أين يُنزع» أكثر من «كيف يُمدَّد عمره».
- كيف يختلف OCX عن DLL؟
- امتداد .ocx يوحي بقوّة أنّه عنصر تحكّم ActiveX، أمّا .dll فقد يكون مكتبة عاديّة أو خادم COM أو DLL معتمدة حول ActiveX. في العمل اليوميّ شائع نمط يكون فيه vendorcontrol.ocx البطل وتسنده DLL مثل vendorhelper.dll. إن سُئل «هل OCX نوع من DLL» فالإحساس قريب، لكنّ في التحقيق والترحيل الأأمن فصل الأدوار.
الملف الشخصي للمؤلف
صفحة الملف الشخصي لمؤلف المقالة.
غو كومورا
مؤسّس شركة كومورا سوفت ذ.م.م.
يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.