تسجيل بلدي .صافي الجمعية COM إمكانية التشغيل المتداخل لا بفضح أساليب

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

  •  05-07-2019
  •  | 
  •  

سؤال

حسنا, انا ذاهب مجنون.كنت أحاول جعل بسيطة .صافي الجمعية مرئية استخدام كائن COM لكنه لا يعمل.لقد حاولت الكثير من مختلف aproaches ولكن أيا منها لا يعمل.حتى الآن الأقرب عندي هو واحد مع أقل قدر من الصفات, واجهات, يدويا تسجيل إلخ.

لدي vbscript كاختبار التي تبدو مثل هذا:

Dim o
o = CreateObject("MyNamespace.MyClass")
msgbox o.Test()

بلدي c# كود تبدو مثل هذا:

using System;
using System.Runtime.InteropServices;
namespace MyNamespace 
{
  [ProgId("MyNamespace.MyClass")]
  public class MyClass
  {
    public string Test()
    {
       return "teststring";
    }
  }
}

على مشروعي (VS2008) لقد مختارة جعل الجمعية COM مرئية' - الذي أضاف سمة إلى AssemblyInfo.cs و أنا أيضا فحص 'التسجيل interop COM'.

أستطيع أن أرى أن ProgId حقا لا فرق (في حالتي على أي حال) - طالما أنني تحديد مساحة الاسم الحقيقي+classname يمكنني ومع ذلك تجاوز الأمر الذي أعتقد هو لطيف.

المشكلة - يا CreateObject على ما يرام ، ولكن طريقة اختبار() لا يمكن العثور عليها.في الواقع إذا كنت تأخذ dll واستخراج tlb و أتوقع أن أرى أي الطرق على الإطلاق.

الخطأ هي أن أحصل على هذا:

C:\inetpub\wwwroot\ASPTest estrun.vbs(3, 1) Microsoft VBScript runtime error:لا يعتمد الكائن هذه الخاصية أو طريقة:'اختبار'

أحب أي ردود فعل ، ولكن فقط أن تتيح لك معرفة ما كنت أحاول.لقد العبث مع Guid AttributeGuid على فئة ، وتحديد COMVisible صراحة على الطبقة وكذلك حاولت التسجيل في interop COM بدلا من ذلك لم regasm /تعليمات البرمجة الأساسية /regfile.

ملاحظة أخيرة - معظم بلدي التجارب قد تدور حول عدم توقيع الجمعية ، ولكن في محاولة لتحديد خطأ حاولت مع strongname/الرئيسية وكذلك لكنها لم تفعل أي شيء.

يمكن لأي شخص أن يساعدني في العثور على المشكلة ، من فضلك ؟

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

المحلول 2

ولقد بدأت من البداية وإزالة أي شيء بخصوص إمكانية التشغيل المتداخل COM على مشروع بلدي، وبعد ذلك أضاف

[Guid(...some guid...)]
[ComVisible(true)]

وعلى MyClass وأضفت strongname (استخدام إعداد مشروع لتعيينها - بدلا من تحديده في AssemblyInfo.cs

وعندما كنت جمعت الجمعية، أنا نسخ الملفات إلى موقع آخر حيث كنت فعلت ذلك ل

regasm MyNamespace.MyClass.dll /codebase /regfile

وثم ركضت وقبلت دخول التسجيل.

وهذا جعل من العمل - كلما قمت بعمل تعديلات أنا فقط إعادة ترجمة ونسخ الملفات عبر القديم (أي إلغاء تسجيل) وبعد ذلك فقط القيام به:

regasm MyNamespace.MyClass.dll /codebase

... وهذا كل شيء - التغييرات التي قمت بها إلى MyClass مرئية imediately في بلدي VBScript و في الصفحة آسيا والمحيط الهادئ بلدي

نصائح أخرى

وأنا لم أذكر أنا تشغيل ويندوز 7 RC 64 بت؟

وحسنا أعتقد أن قد شرح لي VS لا تفعل ذلك الحق: http://kbalertz.com/956933/Issues-building-project-assembly. ASPX يبدو VS يستخدم 32bit نسخة من التسجيل وليس 64BIT ...

ولا تحتاج إلى تعريف بعض واجهة لديها طرق، وتنفيذ تلك الواجهة؟

وهذا يعمل بالنسبة لي:

using System;
using System.Runtime.InteropServices;
namespace MyNamespace
{

    [GuidAttribute("8DDE02DF-B31C-4d91-98A7-C64444701985")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class clsCOMWraper
    {
       public string Test()
      {
         return "teststring";
      }
    }
}

ويجب أن يوقع التجمع Thse.

وو، سجل مع regasm / تعليمات البرمجة الأساسية

وأنا لا أرى أي منشئ للفئة. COM إمكانية التشغيل المتداخل يحتاج منشئ افتراضي (بدون أي بارامس) لذلك لتوليد واجهة COM بنجاح.

وحاول إضافة منشئ ونرى ما اذا كان يعمل.

التحقق من هذا الارتباط هذا العمل تماما أتبع ذلك يعطي حلا مثاليا على خطأ مثل "لا يعتمد الكائن هذه الخاصية أو هذا الأسلوب" رمز المشروع مساعدة

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