ATL. Создаем COM объект Wizard-ом. Добавляем свойства. В .NET создаем экземпляр и показываем его в PropertyGrid. Свойства есть.
MFC. Тот же путь. Однако, никаким образом свойства объекта не отображаются в PropertyGrid. Хотя врапперы генерятся практически одинаковые.. (Разве что в случае MFC — интерфейс IObjxxx имеет аттрибут InterfaceType = 0x020001, а в ATL — этот аттрибут отсутствует).. Попытка убрать этот аттрибут и пересобрать враппер для объекта, созданного с MFC, не привела к появлению свойств в гриде.
Единственный случай корректного отображения свойств mfc com-объекта — это ActiveX control — но там совсем необычный враппер и т.д.
Может кто сталкивался с подобным? .. и что можно сделать?
(Цель — получить отображение свойств для COM-объекта, созданного c MFC)
Спасибо.
22.12.03 18:33: Перенесено модератором из '.NET' — AVK
Здравствуйте, Владимир Кананович, Вы писали:
ВК>ATL. Создаем COM объект Wizard-ом. Добавляем свойства. В .NET создаем экземпляр и показываем его в PropertyGrid. Свойства есть. ВК>MFC. Тот же путь. Однако, никаким образом свойства объекта не отображаются в PropertyGrid. Хотя врапперы генерятся практически одинаковые.. (Разве что в случае MFC — интерфейс IObjxxx имеет аттрибут InterfaceType = 0x020001, а в ATL — этот аттрибут отсутствует).. Попытка убрать этот аттрибут и пересобрать враппер для объекта, созданного с MFC, не привела к появлению свойств в гриде. ВК>Единственный случай корректного отображения свойств mfc com-объекта — это ActiveX control — но там совсем необычный враппер и т.д. ВК>Может кто сталкивался с подобным? .. и что можно сделать? ВК>(Цель — получить отображение свойств для COM-объекта, созданного c MFC)
Интерфейсы поддерживаемые MFC и ATL объектами одинаковые? у MFC объекта есть библиотека типов и объект предоставляет к ней доступ?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали: TK>Интерфейсы поддерживаемые MFC и ATL объектами одинаковые? у MFC объекта есть библиотека типов и объект предоставляет к ней доступ?
Интерфейс диспэтчевый, по паре свойств там и там.. В обоих случаях inproc server. TLB выглядит нормально. Регистрируется. Без проблем находится .Netом.
Также проходят след строки:
m_server.UpdateRegistry(OAT_INPLACE_SERVER);
COleObjectFactory::UpdateRegistryAll();
AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid);
В самом объекте присутствует:
DECLARE_OLETYPELIB
IMPLEMENT_OLETYPELIB
Свойства присутствуют и во враппере и во время дебага из под .НЕТа.. Они доступны для чтения и записи.. Их нет только в PropertyGrid. (
Что интересно, ни один из автоматизирующихся MFC семплов не проявил свои свойства в PropertyGrid. А с ATL такой проблемы нет..
Здравствуйте, VladD2, Вы писали:
VD>MFC всю жизнь делала диспачные КОМ-объекты, а АТЛ дуальные. Может в этом дело?
Хорошая идея.. Тоже была такая мысль..
Однако, я проверил это до того, как спросил ))..
Но даже стандартный сэмпл ACDUAL не позволяет
PropertyGrid ничего отобразить.
Попробуй запустить этот дело под отладчиком и скажи перехватывать все исключения. Скорее всего он будет. Ну, а там тип исключени... колстек... Анакрина...
... << RSDN@Home 1.0 beta 4 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.