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.
Какая ошибка? – Baldrick
Это сообщение об ошибке «Компонент ActiveX не может создать объект» при создании объекта COM. – karthi
Вы пытаетесь иметь два сокласса с тем же CLSID. Это не полетит. Как только это будет разрешено, проверьте, были ли зарегистрированы и какие ProgID для двух классов. Для ProgID, скажем, 'Application.TestA.TestB', должен быть раздел реестра с именем' Application.TestA.TestB' под 'HKEY_CLASSES_ROOT'. Этот ключ должен иметь подраздел с именем 'CLSID', значением по умолчанию которого является GUID, связанный с классом. Наконец, должен быть ключ под 'HKEY_CLASSES_ROOT \ CLSID', чье имя - это GUID. –