تحويل عضو المستوردة
يصف هذا الموضوع كيفية تحويل عملية استيراد للأعضاء التاليين:
الأساليب
Properties
أحداث
يطبق Tlbimp.exe DefaultMemberAttributeإلى أي أسلوب أو خاصية ب DispID 0. لاحظ أن المطورين C# يجب التعامل مع هؤلاء الأعضاء كـ الصفائف. لمزيد من المعلومات، راجع وثائق لغة البرمجة.
الأساليب
عند استيراد توافق COM نوع COM، فإنها تعطي توقيع أسلوب.NET Framework مكافئ إلى توقيع الأسلوب COM الأصلي. أثناء عملية تحويل، تعيين معلمات وقيم الإرجاع و HRESULTs COM في توقيع أسلوب.NET Framework، كـ هو مبين في التوضيح التالي.
تحويل توقيع الأسلوب
يمكنك تفحص بناء الجملة أسلوب باستخدام عارض كائن أو بواسطة استخدام الانعكاس، تماما كما مع أية فئة.NET الأخرى. بشكل افتراضي، عند إرجاع الكائن COM فشل HRESULT، يطرح وقت التشغيل استثناء المقابلة.
Properties
يمكن لمطور COM التصريح بالخصائص والأساليب تشغيل واجهات. أن الجميع خصائص وظائف واصف الوصول المطابقة لتعيين أو الحصول على قيم الخصائص. عند تحويل عملية استيراد وصف مكتبة نوع واجهة ذات خصائص إلى بيانات التعريف، يقوم بإنشاء خاصية وأسلوب واحد أو المزيد أسلوب استرجاع قيمة لهذه الخاصية.
نوع مكتبة عملية التحويل بتحويل وظائف أسلوب استرجاع قيمة خاصية بالطرق التالية:
تصبح خصائص باستخدام السمة [propget] الخصائص المدارة لنفس نوع، باستخدام أسلوب المقابلة يدعى get_propertyname .
تصبح خصائص السمة [propput] أو السمة [propputref] الخصائص المدارة لنفس نوع، باستخدام أسلوب المقابلة يدعى set_propertyname .
خصائص باستخدام كلا [propput] و تصبح سمات [propputref]:
مدارة خصائص نفس نوع كصفة [propputref] ، باستخدام أسلوب المقابلة يدعى set_propertyname
أسلوب ملحق آخر بنفس نوع كصفة [propput] ، تواجه let_propertyname اسم .
يلي نوع المكتبة يعرض الخصائص الأصلية.
تمثيل مكتبة نوع
interface ISample : IDispatch {
[propget] HRESULT prop1([out, retval] short *pVal);
[propput] HRESULT prop1([in] short newVal);
[propget] HRESULT prop2([out, retval] INew **pVal);
[propputref] HRESULT prop2([in] INew *newVal);
[propget] HRESULT prop3([out, retval] INew **ppINew);
[propput] HRESULT prop3([in] BSTR text);
[propputref] HRESULT prop3([in] INew *pINew);
}
تظهر خصائص المحول في followفيg Visual Basic 2005جزء تعليمات برمجية.
Public Property
Get Prop1() As Integer … End Get
Set Prop1(val as Integer) … End Set
End Property
Public Property
Get Prop2() As INew … End Get
Set Prop2(val as INew) … End Set
End Property
Public Property
Get Prop3() As INew … End Get
Set Prop3(val as INew) … End Set
End Property
Public let_prop3(String as Text)
أحداث
يمكن تعريف مكتبة نوع COM الواجهات المستخدمة للأحداث. في مكتبة coclass التي المصادر أحداث يمكن التعرف على واجهة حدث بواسطة تحديد السمة [المصدر]. An حدث sink implements the واجهة و an حدث المصدر consumes it. واجهات COM يؤشر اتصال، والتي سيتم وصفها لا نوع مكتبة، يعيّن مصدر حدث بمصدر حدث.
في the following IDL تعليمات برمجية مثال, the Button فئة implements the IButton واجهة و المصادر the أحداث on the IButtonEvents واجهة.
interface IButton {
HRESULT Init();
}
interface IButtonEvents {
HRESULT Click([in] int x, [in] int y);
HRESULT Resize([out, retval] int *pRetval};
}
coclass Button {
[default] interface IButton;
[default, source] interface IButtonEvents;
}
طراز حدث.NET يختلف طراز يؤشر اتصال COM بشكل ملحوظ. الفئات المدارة الحوض أحداث القيام بذلك بواسطة تمرير مفوض إلى مصدر حدث، بدلاً من استخدام نقاط اتصال COM. قيام الخدمة إمكانية التشغيل المتداخل COM هذه النموذجين أحداث مختلفة.
أثناء عملية استيراد، ينشئ Tlbimp.exe عدة أنواع لتمكين تطبيق تتم إدارته إلى الحوض الأحداث التي يتم sourced بالفئات غير المدارة باستخدام طراز حدث.NET. في التسلسل التالي من الخطوات، ينشئ Tlbimp.exe فئات و واجهات Buttonفئة هو موضح في المثال السابق.
عملية استيراد بإنشاء مفوض نوع لكل حدث الواجهات بالأحداث. تفويض تتألف الأسماء من واجهة مصدر حدث تسطير أسفل السطر، اسم حدث والكلمة EventHandler. على سبيل المثال، في مكتبة النوع في المثال السابق، Clickيصبح حدث IButtonEvents_ClickEventHandlerتفويض.
' A delegate for each event. Delegate Sub IButtonEvents_ClickEventHandler(ByVal x As Integer, _ ByVal y As Integer) Delegate Function IButtonEvents_ResizeEventHandler() As Integer
// A delegate for each event. delegate void IButtonEvents_ClickEventHandler(int x, int y); delegate int IButtonEvents_ResizeEventHandler();
لاحظ أنه توقيع الرقمي للمفوض هو ترجمة مباشرة لتوقيع الأسلوب غير مدار.
Tlbimp.exe imports the الافتراضي واجهة the usual way, keeping the واجهة اسم the same. في ترتيب هو سبيل المثال، الواجهة هو يسمى IButton.
' Direct import of original default interface. Public Interface IButton Sub Init() End Interface
// Direct import of original default interface. public interface IButton { void Init(); }
يستورد Tlbimp.exe واجهة حدث بالطريقة المعتادة، والحفاظ على اسم الواجهة كما هو. في ترتيب هو سبيل المثال، الواجهة هو يسمى IButtonEvent.
' Direct import of original event interface. ' Not of interest to managed sinks. Public Interface IButtonEvents Sub Click(ByVal x As Integer, ByVal y As Integer) Function Resize() As Integer End Interface
// Direct import of original event interface. // Not of interest to managed sinks. public interface IButtonEvents { void Click(int x, int y); int Resize(); }
Tlbimp.exe أيضا بإنشاء على واجهة حدث ثاني، اللاحقة "_Event" تمت الإضافة إلى الاسم الأصلي الواجهة. واجهة هذا حدث الثاني h كـ Clickو Resizeأحداث كـ الأعضاء. يحتوي أيضا على addو removeوظائف للتفويضات حدث. في ترتيب هو سبيل المثال، الواجهة هو يسمى IButtonEvents_Event.
' Modified version of the event interface with events ' for managed sinks.
Public Interface IButtonEvents_Event Sub Click As IButtonEvents_Click Function Resize() As IButtonEvents_Resize Sub add_Click(ByVal Click As IButtonEvents_ClickEventHandler) Sub remove_Click(ByVal Click As _ IButtonEvents_ClickEventHandler) Sub add_Resize(ByVal Resize As _ IButtonEvents_ResizeEventHandler) Sub remove_Resize(ByVal Resize As _ IButtonEvents_ResizeEventHandler) End Interface // Modified version of the event interface with events // for managed sinks. public interface IButtonEvents_Event { IButtonEvents_Click Click; IButtonEvents_Resize Resize; void add_Click(IButtonEvents_ClickEventHandler ); void remove_Click(IButtonEvents_ClickEventHandler ); void add_Resize(IButtonEvents_ResizeEventHandler ); void remove_Resize(IButtonEvents_ResizeEventHandler ); }
ملاحظة في الحالات النادرة التي تحتاج إلى تحويل إلى واجهة حدث، إضافة إلى واجهة يقدمه Tlbimp.exe بدلاً من الأصلي الواجهة.ل مثال، يجب تحويل إلى IButtonEvents_Event، وليس IButtonEvents.
يستورد Tlbimp.exe coclass التي المصادر الأحداث إلى تأكد من تضمين الجميع الواجهات المطبقة بشكل واضح، وذلك بإلحاق اسم الفئة الأصلية باستخدام فئة. على سبيل المثال، Buttonيصبح coclass ButtonClass. وتنتج Tlbimp.exe أيضا على واجهة coclكـs بنفس الاسم كـ coclكـs، والذي يقوم بتطبيق واجهة حدث باستخدام اللاحقة _Event.
' This is the imported coclass interface. ' Note the underscore in IButtonEvents_Event. Public Interface Button Inherits IButton Inherits IButtonEvents_Event End Interface Public Class ButtonClass Implements Button Implements IButton Implements IButtonEvents_Event Sub Init() End Sub 'Init End Class
// This is the imported coclass interface. // Note the underscore in IButtonEvents_Event. public interface Button:IButton, IButtonEvents_Event {} public class ButtonClass:Button,IButton,IButtonEvents_Event { void Init(){} }
راجع أيضًا:
المبادئ
تحويل وحدة نمطية? التي تم استيرادها