أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

باستخدام الربط المبكر الربط المتأخر في التنفيذ التلقائي

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

اضغط هنا لرابط المقالة باللغة الانجليزية245115
الموجز
كيفية ربط إلى ملقم أتمتة يمكن أن يؤثر على العديد من الأشياء في برنامج مثل maintainability مرونة والأداء.

هذا المقال يشرح أنواع الربط متوفرة للعملاء التنفيذ كما weighs كل من وجهي كل أسلوب.
معلومات أخرى
التنفيذ التلقائي هو عملية و/حيث مكون برنامج واحد يتصل مع أو يتحكم مكون برنامج آخر باستخدام Microsoft طراز كائن المكون (COM). هو أساس اتصال المكون عبر معظم المستخدمة في لغات مثل Visual Basic أو Visual Basic for Applications ثم أصبح جزء عادية من معظم البرامج.

من وجهة تاريخية، كائن أتمتة هو أي كائن يدعم IDispatch في الواجهة. تسمح هذه الواجهة للعملاء إلى استدعاء الأساليب الخصائص في وقت التشغيل بدون الحاجة إلى معرفة الكائن بدقة أنها تتصل به في وقت التصميم; تسمى عملية الربط المتأخر. اليوم، ومع ذلك، مصطلح يمكن تطبيق كائن الأتمتة ظاهريًا أي كائن COM حتى تلك التي لا تعتمد IDispatch (و ولذلك يتعذر المتأخر ربط). تفترض هذه المقالة كائن يتم أتمتة يعتمد كلا الأسلوبين الربط.

ما هو تضمين ؟

ربط عملية المتطابقة استدعاءات دالة والتي تم كتابتها من قبل مبرمج رمز الفعلية (داخلي أو خارجي) التي تقوم بتنفيذ الدالة. تم عند ترجمة التطبيق يجب ربط كافة وظائف يسمى في التعليمات البرمجية قبل تنفيذ التعليمات البرمجية.

لفهم العملية اعتبار "الارتباط" من نشر كتاب. تخيل التعليمات البرمجية يشبه النص دفتر حيث في فقرة معينة تمت كتابة شيء ما مثل "مشاهدة الفصل 12 ، الصفحة x للحصول على مزيد من التفاصيل." لا تعرف ما رقم الصفحة حتى الانتهاء من الكتاب لذا قبل يمكن قراءة الفقرة معد, يجب أن يكون منضماً كافة صفحات دفتر معاً ثم إدراج رقم الصفحة الصحيح في الفقرة. انتظر دفتر "ربط" قبل أن يمكنك الرجوع إلى أجزاء أخرى من الكتاب.

يشبه ربط البرامج. التعليمات البرمجية يتكون من الأجزاء التي تحتاج إلى سحب معاً قبل التعليمة البرمجية يمكن أن يكون "قراءة." يتم ربط عملية استبدال الدالة أسماء عناوين الذاكرة (أو الإزاحات الذاكرة ليكون أكثر دقة) حيث التعليمة البرمجية سيقوم "الانتقال إلى" عندما يتم استدعاء الدالة. كائنات COM العنوان إزاحة ذاكرة في جدول مؤشرات (يسمى جدول V) إجراؤها من قبل الكائن. عند منضم دالة COM مرتبطة خلال v-الجدول.

بنية كائن COM أمر بسيط. عند التعليمات البرمجية الخاصة بك تحتوي على مرجع إلى كائن يحتوي مؤشر غير مباشر إلى أعلى الجدول v. V-الجدول عبارة عن صفيف عناوين الذاكرة عليه كل إدخال دالة مختلفة يمكن استدعاء على ذلك الكائن. استدعاء دالة الثالث على كائن COM ، الانتقال إلى أسفل ثلاثة إدخالات في الجدول ثم ثم الانتقال إلى موقع الذاكرة إعطاء هناك. التي بتنفيذ التعليمات البرمجية الخاصة بدالة وإرجاع ، عند اكتمال كنت جاهزاً إعادة تنفيذ السطر التالي من التعليمات البرمجية.
+-[Code]------------+  +.................................[COM Object]...+|                   |  : +-------------+                                :|Set obj = Nothing -|--->| obj pointer |                                :|                   |  : +-|-----------+                                :+-------------------+  :   |   +-----------------+                      :                       :   +-->| v-table pointer |                      :                       :       +--|--------------+                      :                       :          |                                     :                       :          |  +----------------------------+     :                       :  (3rd)   |  | Function 1 Address pointer |     :                       : (Offset) |  +----------------------------+     :                       :          |  | Function 2 Address pointer |     :                       :          |  +----------------------------+     :                       :          +->| Function 3 Address pointer |     :                       :             +----------------------------+     :                       +................................................+				
يعرض المثال أعلاه ما يحدث عند تحرير كائن COM. لأن كافة كائنات COM ترث IUnknown ، هي أول ثلاثة إدخالات في الجدول الأساليب إلى IUnknown. عند الحاجة إلى تحرير كائن استدعاء التعليمات البرمجية الدالة الثالث في v-الجدول (IUnknown::Release).

ولحسن الحظ، يتم إنجاز العمل هذا بواسطة Visual Basic في الخلفية. كما مبرمجاً Visual Basic لديك مطلقًا التعامل مع v-جدول مباشرة. ولكن هذا بنية كيف تكون مرتبطة كائنات COM كافة ومن المهم كنت معتاداً على فهم هو ما الربط.

الربط المبكر

المثال أعلاه ما المعروفة كما مبكر (أو جدول V) تضمين. لكافة كائنات COM ضع هذا الشكل من يأخذ الربط عندما يتم استدعاء واجهة IUnknown كائن COM. ولكن ماذا عن الدالات الأخرى الكائن ؟ كيفية استدعاء الذي به أسلوب تحديث أو الخاصية الأصل الخاصة به هذه هي الوظائف المخصصة التي تعتبر فريدة عادةً إلى كائن. إذا كان يتم افتراض أن مواقعها في الجدول v كيف يمكنك البحث عناوين الدالة المطلوبة للاتصال بها ؟

تعتمد الإجابة ، بالطبع، على أم لا تعرف مقدمًا الذي يبدو عليه للكائن v-الجدول. إذا قمت بذلك، يمكنك تنفيذ نفس عملية الربط المبكر إلى أساليب مخصصة الكائن كما فعلت أساليب IUnknown الخاص به. هذا ما بشكل عام تعني بواسطة "المبكر - الارتباط."

لاستخدام الربط المبكر على كائن تحتاج إلى معرفة الذي يبدو عليه v-جدول الخاص به. في Visual Basic، يمكنك القيام بذلك عن طريق إضافة مرجع إلى مكتبة نوع وصف الكائن واجهة الخاصة به (v-الجدول) كافة الوظائف التي يمكن استدعاؤها على الكائن. بمجرد التي تمت يمكنك تعريف كائن أنه نوع معين، ثم تعيين واستخدام هذا الكائن باستخدام جدول v. على سبيل المثال، إذا أردت أتمتة Microsoft Office Excel باستخدام الربط المبكر بإضافة مرجع إلى "Microsoft Excel 8.0 كائن مكتبة" من مربع الحوار Project|References ، ثم تقوم بتعريف متغير أنه من النوع "Excel.Application." من ثم فصاعداً كافة المكالمات التي تم إجراؤها على متغير كائن قد يكون المبكر منضم:
' Set reference to 'Microsoft Excel 8.0 Object Library' in' the Project|References dialog (or Tools|References for VB4 or VBA).' Declare the object as an early-bound object  Dim oExcel As Excel.Application  Set oExcel = CreateObject("Excel.Application")' The Visible property is called via the v-table  oExcel.Visible = True				
هذه الطريقة جيدة معظم الوقت لكن ماذا يحدث إذا كنت لا تعرف بالضبط الكائن التي ستستخدم في وقت التصميم ؟ على سبيل المثال، ماذا يحدث إذا كانت تحتاج إلى التحدث إلى إصدارات متعددة من Excel أو ربما إلى كائن "غير معروف" تمامًا ؟

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

يتضمن COM IDispatch. الكائنات التي تقوم بتنفيذ IDispatch بأنها dispinterface (إذا كان واجهة فقط أنها تعتمد) أو واجهة مزدوجة (إذا كان لدى واجهة مخصصة المبكر يمكنك أيضاً ربط). عملاء ربط IDispatch بأنها "المتأخر ربط" لأنه يتم تحديد الخاصية بالضبط أو يتم استدعاء أسلوب في وقت التشغيل باستخدام أساليب IDispatch لتحديد مواقعها. الرجوع إلى المثال دفتر السابقة, اعتبار أنه يتم مثل حاشية سفلية بتوجيهك إلى جدول المحتويات حيث لديك "البحث عن"رقم الصفحة في"قراءة الوقت" بدلاً من الحاجة عليه بالفعل طباعة هناك في النص.

يتم التحكم السحري الواجهة بواسطة وظائف اثنين: GetIDsOfNames ثم استدعاء. أسماء الدالة مخططات الأول (سلاسل) إلى معرّف (يسمى على dispid) الذي يمثل الدالة. بمجرد معرفة لـ الدالة التي تريد الاتصال به يمكنك إجراء مكالمة باستخدام الدالة استدعاء. يسمى هذا الشكل من استدعاء الأسلوب "الارتباط المتأخر."

مرة أخرى، في Visual Basic طريقة تحديد كيفية ربط الكائن بواسطة تعريف الكائن. إذا قمت بتعريف متغير كائن كـ "كائن" التي هي ، في الواقع، يطلب Visual Basic لاستخدام IDispatch ، ويتم وبالتالي الربط المتأخر:
' No reference to a type library is needed to use late binding.' As long as the object supports IDispatch, the method can ' be dynamically located and invoked at run-time.' Declare the object as a late-bound object  Dim oExcel As Object  Set oExcel = CreateObject("Excel.Application")' The Visible property is called via IDispatch  oExcel.Visible = True				
كما يمكنك مشاهدة باقي التعليمات البرمجية هو نفسه. الاختلاف الوحيد بين الربط المبكر "و" الربط المتأخر (يتعلق رمز الكتابة) في تعريف متغير.

من المهم ملاحظة أن ما "المتأخر منضمة" يتم الآن استدعاء دالة وليس على الطريقة الذي كان عليه سابقاً. يجب أن تلاحظ من المناقشة السابقة على الربط بشكل عام ذلك IDispatch نفسه "المنضم المبكر:" هذا هو قل إلى يجعل ذلك Visual Basic استدعاء تعيين الخاصية المرئية من خلال إدخال جدول V (IDispatch::Invoke) كما أنه أي استدعاء COM. كائن COM نفسه مسؤولةً عن إعادة توجيه استدعاء الدالة الصحيح لجعل Excel مرئية. يسمح هذا indirection العميل Visual Basic أن يتم تحويلها برمجياً (مرتبط ، عنوان دالة صالح) ولكن لا يزال لا تعرف بالضبط الدالة فعلياً سيفعله العمل.

ربط Dispid

أتمتة بعض العملاء (الأكثر noticeably MFC و 3.0 Visual Basic لكن أيضاً Visual Basic 6.0 "و" 5.0 مع مراعاة على عناصر تحكم ActiveX) استخدام نموذج مختلط من وقت متأخر الربط استدعاء الربط dispid. إذا تعرف كائن COM في وقت التصميم يمكن المخزنة مؤقتاً dispids الدالات التي تسمى وإعادة تمرير مباشرة إلى IDispatch::Invoke دون الحاجة إلى الاتصال GetIDsOfNames في وقت التشغيل. هذا يمكن بشكل كبير زيادة أداء لأن بدلاً من إجراء مكالمات COM اثنين لكل دالة ، تحتاج فقط إلى جعل أحد.

توثيق Dispid غير خياراً يمكنك اختيار بشكل عادي في Visual Basic 5.0 أو 6.0. يستخدم للكائنات التي تتم الإشارة إليها في مكتبة الأنواع ولكن لا تحتوي على واجهة مخصصة (أي، عن الكائنات التي تحتوي على dispinterface) للحصول على تجميع عناصر تحكم ActiveX ولكن ، يستخدم بشكل عام، Visual Basic الربط المبكر أي مكان ستستخدم عادةً الربط dispid.

شكل ربط ينبغي استخدامها؟

تعتمد إجابة هذا السؤال قدر في تصميم المشروع كـ أي شيء آخر. توصي Microsoft الربط المبكر في تقريباً كافة الحالات. ومع ذلك، قد يكون هناك أسباب اختيار الربط المتأخر.

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

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

الربط المتأخر مفيد لا تزال في الحالات حيث واجهة بالضبط من كائن غير معروف في وقت التصميم. إذا كان التطبيق الخاص بك seeks إلى التحدث مع عدة ملقمات غير معروف أو يحتاج إلى استدعاء وظائف حسب الاسم (باستخدام دالة Visual Basic 6.0 CallByName على سبيل المثال) ثم تحتاج إلى استخدام الربط المتأخر. أيضاً يفيد الربط المتأخر للتعامل مع مشاكل التوافق بين إصدارات متعددة من مكون تعديل أو الشامل، واجهة الخاصة به بين الإصدارات تم ضبطه ليناسب بشكل غير صحيح.

مزايا المعطى الربط المبكر جعله أفضل اختيار كلما أمكن ذلك.

الحفاظ على التوافق في إصدارات متعددة

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

توفر تطبيقات Microsoft Office مثال جيد ملقمات COM. يتم عادةً توسيع تطبيقات Office الواجهات الخاصة بهم إلى إضافة وظائف جديدة أو shortcomings السابقة الصحيح بين الإصدارات. إذا كنت تحتاج لتنفيذ أحد تطبيقات Office من المستحسن أن المبكر ربط إصدار أقدم من المنتج التي تتوقعها قد تكون مثبتة على النظام الخاص بك العميل. على سبيل المثال، إذا أردت أن تكون قادراً على أتمتة Excel 95 و Excel 97 وExcel 2000 و Excel 2002 يجب عليك استخدام مكتبة النوع لـ Excel 95 (XL5en32.olb) للحفاظ على التوافق مع كافة الإصدارات الثلاثة.

توضح تطبيقات Office أيضاً يمكن لموفر خدمة إنترنت (طرازات كائن بواجهات ثنائي كبير) تعاني قيود في التنظيم على بعض الأنظمة الأساسية. للحصول على التعليمات البرمجية الخاصة بك للعمل بشكل أفضل عبر كافة الأنظمة الأساسية استخدم IDispatch. للحصول على مزيد من المعلومات حول الحفاظ على التوافق عند العمل مع Office التطبيقات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
247579استخدام الربط DISPID لأتمتة تطبيقات Office كلما أمكن ذلك
مراجع
لمزيد من المعلومات حول COM v-الجداول واستخدام التنفيذ التلقائي، الرجاء مراجعة الكتب التالية:
Rogerson ميرفت ، ISBN داخل COM ، MSPRESS ،: 1-57231-349-8.

Curland ، DevelopMentor بيرني متقدمة Visual Basic 6 ، 0201707128.
off2003 off2007

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 245115 - آخر مراجعة: 05/11/2007 16:31:03 - المراجعة: 7.2

Microsoft Office Ultimate 2007, Microsoft Office Enterprise 2007, Microsoft Office Professional 2007, Microsoft Office Professional Plus 2007, Microsoft Office Standard 2007, Microsoft Office Home and Student 2007, Microsoft Office Basic 2007, Microsoft Office 2003, All Editions, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbmt kbautomation kbinfo KB245115 KbMtar
تعليقات
endChild(m);