Как известно, в VC++ имеют место быть атрибуты и свойства.
Например, я пишу:
[ ... ]
__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 как
__declspec(property(get=get_x,put=put_x)) INT x;
Однако это оказывается несовместимым с атрибутами [propget] и [propput]. А хочется иметь и то, и другое.