Я тут решил написать довольно большую программку, включающую(на данный момент) 5 ActiveX DLL и 1 ActiveX Control. И что бы было в ней что-то общее решил, что бы все объекты этой программы поддерживали единый интерфейс, скажем IAppObject. И что-бы не организовывать специально для этого интерфейса еще одну dll самого нижнего уровня решил просто написать TypeLibrary на IDL.
Изначально код интерфейса был такой:
- Код: Выделить всё
[
object,
uuid(CFFFFFFF-70DE-AAAA-BCDC-F43FBFAED684),
helpstring("Application Object Interface"),
dual,
pointer_default(unique)
]
interface IAppObject : IDispatch
{
//Some methods
};
И VB вроде без ошибок компиляции соглашался имплементировать этот интерфейс.
Тут я решил, что интерфейс можно слегка укоротить:
- Код: Выделить всё
[
object,
uuid(CFFFFFFF-70DE-AAAA-BCDC-F43FBFAED684),
helpstring("Application Object Interface"),
pointer_default(unique)
]
interface IDTMApplication : IUnknown
{
//Some methods
};
Т.е. во-первых он стал не-дуальным(убрано слово dual в объявлении интерфейса) и во-вторых он не стал поддерживать IDispatch(т.е. он производен непосредственно от IUnknown).
Собственно самое смешное, что и этот интерфейс VB имплементирует без ошибок компиляции.
Вопросы
1) Почему? Ведь по правилам в автоматизации могут использоваться только интерфейсы производные от IDispatch? Уж не ждут ли меня тут какие подводные камни, типа, внезапного вылетания моей программы по непонятным причинам?
2) Может еще можно как-то облегчить интерфейс? Может кто подскажет?
3) А сильно ли я его облегчил избавленем от IDispatch? А то может риск не стоит свечь?