![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
как работать с COM на C# ?
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 6 Всего: 118 |
В "Находках" есть раздел "Как в VS.net работать с EXСEL". Там есть что посмотреть.
Раздел "Находки" находится ЗДЕСЬ |
|||
|
||||
| Kurt |
|
||||||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
COM?
ИМХО, тут ничего сложного. Т.к. существует куча всяких COM-объектов, разработчикам пришлось искать способы для взаимодействия .NET<->COM. (унаследованный код и прочие радости.. Так вот. Создается некий промежуточный уровень, к-й транслирует вызовы .NET в вызовы COM (чуть не написал ".COM" В роли такой прослойки выступают службы RCW (если не ошибаюсь, Runtime Callable Wrapper - вызываемая оболочка времени выполнения). Каждому классу COM, с к-м нам необходимо работать, создается оболочка - свой RCW. КАДОМУ COM СВОЙ RCW (!). Т.е. если мы работаем с 2-мя соклассами, оболочек тоже должно быть 2. Однако, для одного модуля COM требуется только один RCW - вне зависимости от количества интерфейсов, опеределенным в этом COM-модуле. Само собой, модуль RCW также отслеживает ссылки на объекты COM, к-е были созданы в .NET-приложении, т.е. все прелести разрекламированного GC нам тут также доступны. Кроме того, в сами COM-модули не надо вносить никаких изменений - просто создать оболочку. Но эт все теория.. Как же все это на практике? Пусть у нас есть COM-модуль, ну допустим, MySuperCOM.dll (с опеределенным классом myCLASS в этом модуле..). Для создания RCW используется утилита tlbimp.exe (type library importer.. а вы думали мы эт все вручную будем делать? Итак. В командной строке пишем (у меня нет студии, можь там есть какие средства-оболочки для этого..):
Все. Самое важное сделали. Теперь использем его в нашем приложении:
Да, вот еще что.. Если нужно прямо обратиться к некоторому интерфейсу:
Вышесказанное относится только к РАННЕМУ СВЯЗЫВАНИЮ - при позднем связывании чуток по-другому - там tlbimp бесполезен (если надо - могу рассказать..). Кстати, взаимодействие COM->.NET (т.е COM вызывает .NET-сборку) основано на похожей технологии - там существует прослойка (CCW - COM Callable Wrapper - оболочка для COM с возможностью вызова) - и COM "считает", что .NET-сборка - обычный COM-модуль. Все. Enjoy it. Как говорится, omne ignotum pro magnifico. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||
|
|||||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
спасибо посмотрю !
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
И как? Опробовал?
Можь, я где ошибся?.. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
Напишите статью про СОМ и C# все будет интересно....
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Хм..
Можно было бы.. Заодно и использование .NET-сборок в COM упомянуть.. Тока.. Я, ИМХО, не подойду - ни разу не пробовал писать статьи, да и с COM ничего серьезного. Так, по мелочи. Кто возьмется? Стоп. А разве готового в сети ничего нету? Или нужен "свежий взгляд"? Это сообщение отредактировал(а) Kurt - 8.4.2004, 01:59 -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
А Вы попробуйте ...просто изложить свои знания на бумаге по COM м С#
готового не видел ... да и свежий взгляд был бы кстати -------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| Guest_Sergey |
|
|||
|
Unregistered |
В самом деле, это будет очень полезно и для нас и для вас (изложение на бумаге упорядочивает мысли). Особенно, конечно, для нас. А уж благодарные читатели будут помнить вас вечно. |
|||
|
||||
| Kurt |
|
|||
|
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Попробуем..
Можь че и получится.. Это сообщение отредактировал(а) Kurt - 22.4.2004, 00:00 -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
| Shtorm |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 23.2.2009 Где: Таганрог Репутация: нет Всего: 1 |
Подскажите всё ж, как чайнику создать например библиотеку в которую включён интерфейс, ну типа нажмите пункт меню вот там, напишите например вот так. Прийдя из мира Делфи мне там понятно, создаём COM объект из менюшки, или библиотеку типов AcctiveX добовляем нужные интерфейсы генерируем код автоматически, описываем методы, компилим, получаем библиотеку типов в которой зашит интерфейс имеющий свой идентификатор GUID. эту библиотечку регистрируем в системы и по этому идентификатору работаем с интерфейсом.
А задача следующая, у меня есть интерфейс я его должен импортировать в dll и реализовать методы интерфейса так как нужно мне именно в этой библиотеки. Моя прога основная написана на делфе и сканирует допустим папку PlugIn в которой есть dll на разных языках, я знаю что в каждой библиотеки реализован мой интерфейс (методы интерфейса реализованы по своему, например интерфейс IStart имеет метод Load. Например при вызове этого метода из одной библиотеки появляется сообщение "Вызван метод Load библиотеки CSharp", в другой метод Load будет выдавать другое сообщение или создовать что-то, не важно), я эту библиотечку регестрирую в системе. И подключаюсь к этой библиотеки, как к библиотеки типов, получаю идентификатор моего интерфейса (GUID), но именно из загружаемой библиотеки и вызываю нужный мне метод. Как создать такое на C#? Kurt, Дал полезную информацию, но всё ж мне интересно как это сделать поэтапно, что бы можно было пользоваться таким COM в делфе. Или где можно найти инфу подобную, по делфе например есть куча книг, и есть книга, которая полностью COM посвещена, по C# такого не нашёл, понимаю, что NET штука полезная, но всёж мне нужен COM ( знаю, что COM поддерживается Net платформой, речь не об этом) в том виде, который можно наблюдать в Делфе. Тоесть при старте программы, сканирую папку с библиотеками, найдя dll, пытаюсь подключить её как библиотеку типов, получаю атрибуты библиотеки типов, а именно GUID библиотеки типов, получаю GUID интерфейса(ов) реализованного в этой библиотеки типов и вызываю метод интерфейса из неё. Как реализовать библиотеку под мою прогу на делфе или на си билдере это понятно. А вот с C# не знаю.... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |