2013-11-19 3 views
2

У меня есть COM-видимый вложенный класс, который выглядит ниже.Как вызвать методы вложенного класса .Net из COM-вызовов

[ComVisible(true)] 
[InterfaceType(ComInterfaceType.InterfaceIsDual)] 
[Guid("12341234-3EDA-4A6D-9E84-804DCC625BE2")] 
public interface ITestA 
{ 
} 

[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.None)] 
[ComDefaultInterface(typeof(ITestA))] 
[Guid("922F3F5A-0B65-4B58-AB91-76822A4FAA00")] 
public class TestA : ITestA 
{ 
    [ComVisible(true)] 
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] 
    [Guid("43211234-3EDA-4A6D-9E84-123DFC625BE2")] 
    public interface ITestB 
    { 
     string SayHello(); 
    } 

    [ComVisible(true)] 
    [ClassInterface(ClassInterfaceType.None)] 
    [ComDefaultInterface(typeof(ITestB))] 
    [Guid("922F3F5A-0B65-4B58-AB91-76822A4FAA00")] 
    public class TestB : ITestB 
    { 
     public string SayHello() 
     { 
      return "Hello"; 
     } 
    } 
} 

И я использую VBScript для создания экземпляра класса TestB, как показано ниже.

Set objTestB = CreateObject("Application.TestA.TestB") 
Wscript.Echo objTestB.SayHello() 

Это сообщение об ошибке «Компонент ActiveX не может создать объект» при создании объекта COM.

+0

Какая ошибка? – Baldrick

+0

Это сообщение об ошибке «Компонент ActiveX не может создать объект» при создании объекта COM. – karthi

+2

Вы пытаетесь иметь два сокласса с тем же CLSID. Это не полетит. Как только это будет разрешено, проверьте, были ли зарегистрированы и какие ProgID для двух классов. Для ProgID, скажем, 'Application.TestA.TestB', должен быть раздел реестра с именем' Application.TestA.TestB' под 'HKEY_CLASSES_ROOT'. Этот ключ должен иметь подраздел с именем 'CLSID', значением по умолчанию которого является GUID, связанный с классом. Наконец, должен быть ключ под 'HKEY_CLASSES_ROOT \ CLSID', чье имя - это GUID. –

ответ

1

Регистрация библиотеки COM создает Application.TestA + TestB как CLSID. Чтобы создать экземпляр с CreateObject ("Application.TestA.TestB"), добавьте атрибут ProgID в код C#.

[ProgId("Application.TestA.TestB") 
Смежные вопросы