powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / программно зарегистрировать COM_TLB. Можно ?
8 сообщений из 8, страница 1 из 1
программно зарегистрировать COM_TLB. Можно ?
    #38511361
Pruvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.

Имеется 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 там, очевидно, зарегистрирована не будет.

Спасибо !
...
Рейтинг: 0 / 0
программно зарегистрировать COM_TLB. Можно ?
    #38511363
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
regasm /reg
...
Рейтинг: 0 / 0
программно зарегистрировать COM_TLB. Можно ?
    #38511424
Pruvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите. Как удалить регистрацию TLB из реестра ?

Я пока не выяснил как - и вот вопрос, будет ли корректно просто удалить запись в реестре ?
Мне нужно протестировать что будет, если TLB не будет зарегистрирована.
...
Рейтинг: 0 / 0
программно зарегистрировать COM_TLB. Можно ?
    #38511427
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PruvetikХотелось бы как то встроить эту Interop.LibName.dll в проект. Можно ?Нужно.

PruvetikВо первых так я избавлюсь от лишней dllкиЛишних dll нет. Interop это лишь "переходник" для оригинального com'а под дотнет.

Pruvetik3 А нужна ли эта TLB вообще на машине пользователя ?Нет. Она нужна только на этапе компиляции. Ну и для разработки, само собой.
...
Рейтинг: 0 / 0
программно зарегистрировать COM_TLB. Можно ?
    #38511428
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PruvetikЯ пока не выяснил как - и вот вопрос, будет ли корректно просто удалить запись в реестре ?Да.
PruvetikМне нужно протестировать что будет, если TLB не будет зарегистрирована.В средстве разработки (VBA например) в списке доступных компонентов будет отсутствовать соответствующий компонент. Регистрация tlb отвечает только за это.
...
Рейтинг: 0 / 0
программно зарегистрировать COM_TLB. Можно ?
    #38511440
Pruvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

О. Я рад.
Вот тоже думал что не нужно регистрировать TLB на машине клиента.

Сейчас ищу машинку на которой смогу проверить это точно.
Зарегаю там только COM клиента и запущу сервер. По идее, должно будет заработать - а именно, COM объект должен будет поддерживать оба интерфейса, а не только родной. Ну и сервер должен будет вызвать методы второго интерфейса.

PS. Если же не сработает, то я протестирую "обратную совместимость" :) Сервер не сможет скастовать во второй вид интерфейса, и посчитает, что COM его и не поддерживает. Это норма и я увижу, что просто не работает функционал.
...
Рейтинг: 0 / 0
программно зарегистрировать COM_TLB. Можно ?
    #38511451
Pruvetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyPruvetikХотелось бы как то встроить эту Interop.LibName.dll в проект. Можно ?Нужно.

Возможно я не правильно выразился.
Мне не нравится, что сейчас DLLка лежит отдельным файлом.

Можно ли сделать, чтобы при компиляции Солюшена создавался один EXE и уже внутри хранил то, что сейчас хранится в DLLке ?
...
Рейтинг: 0 / 0
программно зарегистрировать COM_TLB. Можно ?
    #38511457
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PruvetikAntonariyпропущено...
Нужно.

Возможно я не правильно выразился.
Мне не нравится, что сейчас DLLка лежит отдельным файлом.

Можно ли сделать, чтобы при компиляции Солюшена создавался один EXE и уже внутри хранил то, что сейчас хранится в DLLке ?Какими-нибудь нештатными средствами наверняка можно, но не нужно. Не стоит мешать дотнету работать так, как он привык.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / программно зарегистрировать COM_TLB. Можно ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]