MIDL CoClass, полученный из интерфейса, определенного в том же файле - PullRequest
3 голосов
/ 08 августа 2011

Почему я не могу определить интерфейс в файле idl, а затем сделать так, чтобы CoClass извлекал его в блоке библиотеки в том же файле, когда я получаю указанный интерфейс из интерфейса, который я определил в другом проекте Proxy Server?

[
 object,
 uuid(00000000-0000-0000-0000-000000000000),
 pointer_default(unique)
] interface IMyInterfaceB: IMyInterfaceA
{
    [id(1), helpstring("")]
    HRESULT NewMethod();
}

[
 uuid(10000000-0000-0000-0000-000000000000),
 helpstring("Type Library 1.00"),
 version(1.00)
]
library MyLibrary
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    [
        uuid(20000000-0000-0000-0000-000000000001),
        helpstring("My Class")
    ]
    coclass CMyClass
    {
        interface IMyInterfaceA;
        //interface IMyInterfaceB; /* error when I remove rem */
    };

}

1> midl \ oleaut32.dll: ошибка MIDL2020: ошибка при создании библиотеки типов: ошибка LayOut: IMyInterfaceB (0x800288C6

Ответы [ 3 ]

1 голос
/ 30 января 2012

Вам необходимо использовать разные значения атрибутов id в базовом и унаследованном интерфейсах.

1 голос
/ 09 августа 2011

Как отметил Ханс Пассант, я не должен выбирать GUID, генератор должен использоваться для их генерации. Хотя это не было проблемой, это было похоже на природу. Я не следовал правильной схеме ID при определении моих интерфейсов, так как до сих пор это не было важно.

Полагаю, я перечитываю соответствующий раздел в Программирование COM с Microsoft .NET. Я нашел причину, когда впервые попробовал инструмент поиска ошибок, разобрав его существование, включив функцию расширенного режима Visual Studios.

Извлеченные уроки: /

BekaD:

0 голосов
/ 14 ноября 2014

Пользователь "vpp" был прав с этим. Я только что столкнулся с этой ошибкой, когда пытался создать новый интерфейс, наследуемый от другого, чтобы я мог перегрузить один из методов. Я скопировал и вставил всю вещь из исходного интерфейса, но не изменил часть «id (1)», чтобы она стала новым уникальным номером, поэтому я также получал «ошибка MIDL2020: ошибка при создании библиотеки типов: ошибка LayOut»

...