هل من الممكن عرض C # Enum للمتصلين عبر الإنترنت، وإذا كان الأمر كذلك، فكيف؟

StackOverflow https://stackoverflow.com/questions/1276442

سؤال

لدي تجميع مدار يطلق عليه عبر COM Interop. مثل عميل VBScript، عميل بيرل، وهلم جرا.

الفصول مزينة

[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

ثم بالطبع أفعل شيئا Regasm، وجميع الطرق تعمل بشكل جيد.

ولكن هناك أيضا أنواع المعهد في الجمعية. أرغب في استخدام تطبيقات COM الأسماء الرمزية، لقيم Enum.

كيف يمكنني تعريض المعاملة عبر com interop؟ هل أحتاج فقط إلى إضافة هذه السمات؟

[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]
[ComVisible(true)]

ثم، كيف يمكنني الإشارة إلى تلك الأسماء الرمزية في VBScript؟ لا أرى أنواع المعهد في Oleview. (يجب أن أكون؟) أرى جميع الأنواع الأخرى في OLEView.

هل كانت مفيدة؟

المحلول

يستخدم VBScript وغيرها من العملاء المتأخرين idispatch لاستدعاء طرق على الكائنات. على هذا النحو، لا تملك هذه اللغات الوصول إلى المعلومات في Typelib - فهي فقط إنشاء كائن من GUID، واحصل على مؤشر IDispatch مرة أخرى، وبدء تشغيل طرق الاتصال بالاسم.

أنا غير متأكد من الجزء interop COM من السؤال، ولكن حتى لو عرض المعاملة في OLEView، فلن تتمكن من استخدامها مباشرة.

ومع ذلك، إذا كنت قادرا على نشر العداء في Typelib، فقد كتبت أداة Eons قبل أن تقوم بإنشاء ملف نصي (VBS أو JS) يحتوي على جميع العتاد من Typelib كمثواصات.

انظر هنا: http://www.kontrollbehov.com/tools/tlb2const/

نصائح أخرى

جمعية .NET الخاصة بي (حتى الآن) التي أدلت بها COM-Visible تحتوي أيضا على نوع Enum، الذي أظهر جيدا في OLEView. كان لي المكتبة بأكملها تكون واضحة كوم

[ComVisible(true)]

لم يكن ضروريا. هل نوعك من النوع الخاص بك؟

الشيء الوحيد الذي حدث هو أن التعدادات المختلفة كانت "البادئة" مع "اسم Enum Type'_:

public enum DataType
{
    INT32,
    FLOAT64,
    INT8
}

تحولت إلى:

typedef [...]
enum {
    DataType_INT32 = 0,
    DataType_FLOAT64 = 1,
    DataType_INT8 = 2
} DataType;

في مكتبة النوع.

أعرف أن هذا هو موضوع قديم للغاية، لكنني سأضيف 2 سنتين للمستكشفين في المستقبل. عندما أعرف العادة في C # أزينها مع [GUID (...)، Comvisible (True)] وليس Guidattribute.
علي سبيل المثال:

[Guid("28637488-C6B3-44b6-8621-867441284B51"), ComVisible(true)]
public enum myEnum
{
    first,
    second,
    third,
    fourth
}

ثم يكون التعداد متاحا في VB6 ك Myenum_First، Myenum_Second وما إلى ذلك.

يمكنك تضمين تعيين القيم الرئيسية في تلك القائمة أيضا، لذلك سيكون أولا = 1 صالحا في التعداد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top