|
Еще пара вопросов по COM.
|
|||
---|---|---|---|
#18+
Привет. Дайте совет пожалуйста. Приложение C# использует COM Объекты. Они написаны на Delphi 7 (хотя по идее разницы не должно быть, ввиду природы COM) Работа с COM объектом, ведется через "позднее связывание", без библиотек типов. Код: c# 1. 2. 3. 4.
Сейчас назрела необходимость добавить новый функционал - но с учетом best practices. А именно, вместо переписывания давно использующегося интерфейса, добавить еще один. Ну и переделать часть COMов (до которых смогу добраться) - чтобы они реализовали еще и новый интерфейс. Ну и в процессе работы, нужно будет проверять - реализует ли COM новый интерфейс, и если да то использовать еще и новый функционал. Собственно вопросы. 1. Как можно в C# запросить у COM'а, поддерживает ли он некий интерфейс и вызвать метод этого интерфейса ? т.е. нужно проверять, поддерживает ли COM новый функционал, и только тогда использовать его. 2. Нужно добавить "обратный вызов" в интерфейс. Чтобы COM объект мог сообщать серверу о событиях. Как реализовать в C# инициализацию, с передачей ссылки на свой метод ? Чтобы мол COM Объект потом дергал этот метод и передавал в него параметры ? Спасибо ! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 19:15 |
|
Еще пара вопросов по COM.
|
|||
---|---|---|---|
#18+
Дополнение к 1му вопросу. Подскажите как можно у COM объекта выяснить, что он реализовал метод интерфейса ? Дело в том, что получается МОЖНО дорабатывать интерфейс (добавлять новые методы) и создавать на его основе классы. И после этого можно вызывать старые COMы (те которые реализовали версию интерфейса без новых методов) - нужно лишь не вызывать новые методы ! Я удивлен, но это работает ! Вопрос лишь - а как узнать то, реализует метод или нет ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 21:34 |
|
Еще пара вопросов по COM.
|
|||
---|---|---|---|
#18+
MsSql_Studyвызвать метод этого интерфейса ? поиметь описание этого интерфейса на c# с указанием атрибутов giuid ну например Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
далее Код: c# 1.
если p не нулл - вызывать методы ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2013, 22:36 |
|
Еще пара вопросов по COM.
|
|||
---|---|---|---|
#18+
Изопропил, Вопрос в том, можно ли узнать у COM объекта, который я создал, что есть ли у него метод с конкретным именем ? Например Код: c# 1. 2. 3. 4.
Можно ли перед вызовом проверить, что метод "DoLongWork" имеется ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 14:57 |
|
Еще пара вопросов по COM.
|
|||
---|---|---|---|
#18+
MsSql_StudyДело в том, что получается МОЖНО дорабатывать интерфейс (добавлять новые методы) и создавать на его основе классы. И после этого можно вызывать старые COMы (те которые реализовали версию интерфейса без новых методов) - нужно лишь не вызывать новые методы ! Я удивлен, но это работает ! работать то работает, но это нарушает правила COM - нужно создавать новый интерфейс наследуя от существующего(это о COM-сервере речь), далее выяснить, реализует ли сервер нужный интерфейс MsSql_StudyМожно ли перед вызовом проверить, что метод "DoLongWork" имеется ? Можно, но известный мне способ не особо изящен (прямой вызов IDispatch.GetIDsOfNames) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2013, 15:54 |
|
|
start [/forum/topic.php?fid=20&fpage=135&tid=1403564]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 374ms |
total: | 509ms |
0 / 0 |