|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
Привет. Имеется C# Win-служба. Она создает COM объект. Имеется общий интерфейс, которым и оперируют эти две сущности. Он описан в отдельной TLB. В COM объект ее встроить нет возможности. У меня несколько вопросов. 1 Как из C# зарегистрировать TLB ? Хочу встроить эту регистрацию в момент инсталляции сервиса. 2 Сейчас, работа с этой TLB из C# ведется так: я добавляю ссылку в проект, и указываю эту TLB. В проекте создается DLLка Interop.LibName.dll. После чего я и получаю в программу описание интерфейса и работаю с COM объектом. Хотелось бы как то встроить эту Interop.LibName.dll в проект. Можно ? Во первых так я избавлюсь от лишней dllки, а во вторым смог бы избавится от отдельной TLB. 3 А нужна ли эта TLB вообще на машине пользователя ? Я создаю COM объект по его ProgId. И привожу к интерфейсу, описанному в Interop.LibName.dll. Нужно ли, чтобы вообще TLB была зарегистрирована ? Ведь по идее, тип интерфейса одинаков у Сервера и Клиента. GUID, список методов, параметры - все вроде бы совпадает. Или все же обязательно чтобы этот интерфейс был описан в реестре ? Примечание ! Com объект реализует два интерфейса. Первый он регистрирует, когда устанавливается в систему. А вот второй он не регистрирует а лишь реализует (импортировав из библиотеки типов - которую я зарегистрировал на своей машине разработчика). Поэтому C# сервер создает COM по одному интерфейсу, а затем приводит его ко второму интерфейсу. Опять же повторю - нет возможности поправить COM объект, чтобы добавить в его собственную TLB второй интерфейс. Он должен быть внешним. Это мне нужно для поддержки обратной совместимости COM объекта - т.к. он был разработан давно. Т.е. сервер может запускаться на машине, где будет установлен старый COM - и TLB там, очевидно, зарегистрирована не будет. Спасибо ! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 17:21 |
|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
regasm /reg ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 17:23 |
|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
Подскажите. Как удалить регистрацию TLB из реестра ? Я пока не выяснил как - и вот вопрос, будет ли корректно просто удалить запись в реестре ? Мне нужно протестировать что будет, если TLB не будет зарегистрирована. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 18:25 |
|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
PruvetikХотелось бы как то встроить эту Interop.LibName.dll в проект. Можно ?Нужно. PruvetikВо первых так я избавлюсь от лишней dllкиЛишних dll нет. Interop это лишь "переходник" для оригинального com'а под дотнет. Pruvetik3 А нужна ли эта TLB вообще на машине пользователя ?Нет. Она нужна только на этапе компиляции. Ну и для разработки, само собой. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 18:26 |
|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
PruvetikЯ пока не выяснил как - и вот вопрос, будет ли корректно просто удалить запись в реестре ?Да. PruvetikМне нужно протестировать что будет, если TLB не будет зарегистрирована.В средстве разработки (VBA например) в списке доступных компонентов будет отсутствовать соответствующий компонент. Регистрация tlb отвечает только за это. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 18:32 |
|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
Antonariy, О. Я рад. Вот тоже думал что не нужно регистрировать TLB на машине клиента. Сейчас ищу машинку на которой смогу проверить это точно. Зарегаю там только COM клиента и запущу сервер. По идее, должно будет заработать - а именно, COM объект должен будет поддерживать оба интерфейса, а не только родной. Ну и сервер должен будет вызвать методы второго интерфейса. PS. Если же не сработает, то я протестирую "обратную совместимость" :) Сервер не сможет скастовать во второй вид интерфейса, и посчитает, что COM его и не поддерживает. Это норма и я увижу, что просто не работает функционал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 18:48 |
|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
AntonariyPruvetikХотелось бы как то встроить эту Interop.LibName.dll в проект. Можно ?Нужно. Возможно я не правильно выразился. Мне не нравится, что сейчас DLLка лежит отдельным файлом. Можно ли сделать, чтобы при компиляции Солюшена создавался один EXE и уже внутри хранил то, что сейчас хранится в DLLке ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 18:55 |
|
программно зарегистрировать COM_TLB. Можно ?
|
|||
---|---|---|---|
#18+
PruvetikAntonariyпропущено... Нужно. Возможно я не правильно выразился. Мне не нравится, что сейчас DLLка лежит отдельным файлом. Можно ли сделать, чтобы при компиляции Солюшена создавался один EXE и уже внутри хранил то, что сейчас хранится в DLLке ?Какими-нибудь нештатными средствами наверняка можно, но не нужно. Не стоит мешать дотнету работать так, как он привык. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2013, 19:02 |
|
|
start [/forum/topic.php?fid=20&msg=38511428&tid=1403470]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 338ms |
total: | 495ms |
0 / 0 |