Здравствуйте, vitaly_spb, Вы писали:
U>>Существует ли способ узнать где клас юзают — в managed application или в unmanaged через COM-interop.
_>Чисто академический вопрос или реально для чего-то нужно? В чем задача?
Нужно заказчику. К сожаленею, ничего больше сказать не могу.
Re: Определение типа application (managed/unmanaged)
Здравствуйте, Udger, Вы писали:
U>Есть ассембли с COM-visible классом. U>Существует ли способ узнать где клас юзают — в managed application или в unmanaged через COM-interop.
Навскидку — просмотреть CallStack и убедится в том, что там нет наверху CCW.
Здравствуйте, AndrewVK, Вы писали:
AVK>Навскидку — просмотреть CallStack и убедится в том, что там нет наверху CCW.
Ну а если будет лишний переход (managed -> unmanaged ActiveX -> managed COM-visible class), e.g. Visual Studio add-in tool window?
Здравствуйте, Udger, Вы писали:
U>Есть ассембли с COM-visible классом. U>Существует ли способ узнать где клас юзают — в managed application или в unmanaged через COM-interop.
Открываешь mscoree.h смотришь там интерфейсы. Например, IManagedObject. Думаешь. Собственно, .NET примерно так и работает. Если, при вызове из managed кода объект поддерживает спеуциальный интерфес, то сразу запрашивается managed ссылка и дальше, все вызовы идут напрямую. Можно, вставить логгер в QueryInterface и посмотреть что хотят.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Определение типа application (managed/unmanaged)
Здравствуйте, TK, Вы писали:
TK>Открываешь mscoree.h смотришь там интерфейсы. Например, IManagedObject. Думаешь. Собственно, .NET примерно так и работает. Если, при вызове из managed кода объект поддерживает спеуциальный интерфес, то сразу запрашивается managed ссылка и дальше, все вызовы идут напрямую. Можно, вставить логгер в QueryInterface и посмотреть что хотят.
Хотя, это решение несколько "в другую сторону" Можно COMVisible класс опубликовать через специальный перехватчик. Так, что-бы все COM вызовы перехватывались им а потом, передавались дальше. Если перехватчик не сработает то, вызывающий код managed.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Определение типа application (managed/unmanaged)
Здравствуйте, Udger, Вы писали:
AVK>>Навскидку — просмотреть CallStack и убедится в том, что там нет наверху CCW. U>Ну а если будет лишний переход (managed -> unmanaged ActiveX -> managed COM-visible class),
Фреймворк такие переходы устраняет. Т.е. к примеру, затолканый через COMовский ISelectionContainer в PropertyGrid компонент изнутри получает прямую ссылку на PropertyGrid, а не СОМ-обертку.