Здравствуйте Михаил Челноков, Вы писали:
МЧ>Например, я пишу:
МЧ>__interface IMyInterface: IDispatch {
МЧ>[propget, id(1), helpstring("property x")] HRESULT x([out, retval] INT* pX);
МЧ>[propput, id(1), helpstring("property x")] HRESULT x([in] INT newX);
МЧ>};
МЧ>Это всё чУдно компилируется, генерится IDL, из него TLB, и потом я могу писать нечто типа
МЧ>IMyInterfacePtr p;
МЧ>...p->x=0;
МЧ>Однако, такое я могу писать только в другом проекте. Т.е. в том, при компиляции которого TLB уже есть и импортирован. В том же проекте, при компиляции которого этот TLB в конце концов генерируется, компилятор выдает ошибку — нет такого поля в этом классе.
МЧ>Что делать?
Если у тебя файл x.idl, то Wizard добавляет в #include несколько файлов, связанных с твоим x.idl. Это файлы x.h и x_i.c.
Никто не мешает тебе убрать #include "x.h", в котором нет Врапперов из #import, и добавить вместо этого #import с этими Врапперами. Однако, нужно учесть что директива #import может генерить
другие имена для виртуальных методов из интерфейса (добавляется raw_ для методов). Это нужно учитывать при реализации их в классе.