كيف يمكنني استخدام Reg-Free COM لمرجع vb6 dll في مشروع .net؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

لقد كنت أحاول حل هذه المشكلة لفترة طويلة، ويبدو أن لا شيء يعمل.

لدي COM DLL مكتوب في vb6.أقوم بإضافة مرجع إلى مكتبة الارتباط الديناميكي (DLL) هذه في .net، مع تعيين الخاصيتين "معزولة" و"نسخ محلي" على "صحيح" في المرجع.يبدو أن هذا من المفترض أن يمكّن com.reg-free.

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

ما الخطأ الذي افعله؟لقد قرأت الكثير من المقالات المتفرقة حول هذا الموضوع ولكن لم يقدم لي أي منها حلاً عمليًا.لقد تلاعبت بالاستوديو المرئي دون جدوى.لقد قمت بتعديل كمية صغيرة من ملف make-my-manifest، لكنه لم ينجح (حتى في مشروع اختباري).

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

المحلول

وكنت إنشاء واستخدام الطبقة كوم على موضوع غير واجهة المستخدم. يبدو كوم ريج خالية في دلس VB6 لا يعمل في هذا الوضع. يظهر هذا الرمز اختبار ما يلي:

Private Sub RunTest() Handles Button1.Click
    Try
        Dim x As New RegTestProject.RegTestCall
        MsgBox(x.RegTestFunction())
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Private Sub RunThreadedTest() Handles Button2.Click
    'fails if reg-free COM is used'
    Dim t As New Threading.Thread(AddressOf RunTest)
    t.Start()
End Sub

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

نصائح أخرى

وأنا متأكد من أنه عند الرجوع مكونات COM بهذه الطريقة، استيراد مكون COM يحدث كل مرة تقوم فيها بناء. وهذا يعني أن العنصر COM يجب تسجيل الطريقة التقليدية على كل آلة المشروع سيتم بناء عليها.

وهنا أ وصلة الذي يصف استخدام التسجيل المجاني com interop.إذا كنت قد قمت بذلك بالفعل، فيرجى نشر ملف البيان الخاص بك.قد يكون لديك خطأ مطبعي في عداد المفقودين.

يحرر

قد يكون من الأسهل مجرد التفكير في تسجيل ملف dll في المرة الأولى التي يتم فيها تشغيل التطبيق على جهاز جديد.التسجيل المجاني لـ com interopt متاح فقط على نظام التشغيل Windows XP والإصدارات الأحدث، لذا إذا كنت تستهدف أي ديناصورات، فلن ينجح الأمر.

وهنا مقتطف من استكشاف الأخطاء وإصلاحها قسم من MSDN شرط على COM خالية من ريج.الاعتذارات إذا كنت قد رأيت ذلك بالفعل.والخبر السار هو أنك بالفعل جزء من الطريق من خلال الخطوات.يقترح إعادة إنتاج المشكلة في Windows Server 2003 (ربما مع الكمبيوتر الظاهري؟) ومن ثم يجب أن يساعد سجل الأحداث.

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

عند استكشاف الأخطاء وإصلاحها قضايا COM خالية من التسجيل ، عارض الحدث على Windows Server 2003 هو صديقك...ابحث في سجل أحداث النظام عن الأحداث من خادم COM.لا أقترح أن تنظر إلى سجل حدث Windows XP ...سوف تحتوي دائمًا على رسالة ...وهذا لا يساعد في تحديد المشكلة.

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