Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> COM and C# 
:(
    Опции темы
ElectricalStorm
Дата 9.3.2004, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



как работать с COM на C# ?


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
AntonSaburov
Дата 9.3.2004, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



В "Находках" есть раздел "Как в VS.net работать с EXСEL". Там есть что посмотреть.
Раздел "Находки" находится ЗДЕСЬ
PM MAIL WWW ICQ   Вверх
Kurt
Дата 10.3.2004, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



COM?
ИМХО, тут ничего сложного.
Т.к. существует куча всяких COM-объектов, разработчикам пришлось искать способы для взаимодействия .NET<->COM. (унаследованный код и прочие радости.. smile.gif)
Так вот.
Создается некий промежуточный уровень, к-й транслирует вызовы .NET в вызовы COM (чуть не написал ".COM" smile.gif). Т.е. программа на .NET общается с COM как с обычной .NET-сборкой - для программы, этот "транслятор" совершенно прозрачен.
В роли такой прослойки выступают службы RCW (если не ошибаюсь, Runtime Callable Wrapper - вызываемая оболочка времени выполнения).
Каждому классу COM, с к-м нам необходимо работать, создается оболочка - свой RCW. КАДОМУ COM СВОЙ RCW (!). Т.е. если мы работаем с 2-мя соклассами, оболочек тоже должно быть 2.
Однако, для одного модуля COM требуется только один RCW - вне зависимости от количества интерфейсов, опеределенным в этом COM-модуле.
Само собой, модуль RCW также отслеживает ссылки на объекты COM, к-е были созданы в .NET-приложении, т.е. все прелести разрекламированного GC нам тут также доступны.
Кроме того, в сами COM-модули не надо вносить никаких изменений - просто создать оболочку. smile.gif

Но эт все теория.. Как же все это на практике?
Пусть у нас есть COM-модуль, ну допустим, MySuperCOM.dll (с опеределенным классом myCLASS в этом модуле..).
Для создания RCW используется утилита tlbimp.exe (type library importer.. а вы думали мы эт все вручную будем делать? smile.gif)
Итак. В командной строке пишем (у меня нет студии, можь там есть какие средства-оболочки для этого..):
Код
tlbimp MySuperCOM.dll /out:MySuperNETCOM.dll

Все. Самое важное сделали. smile.gif
Теперь использем его в нашем приложении:
Код
/* COMTest.cs */
namespace COMTest{
using System;

using MySuperNETCOM; // ВОТ оно!! Самое нужное и важное!

public classs COMTest{

 public static void Main(){
 
  myCLASS cl = new myCLASS();

  //допустим, в COM-классе был определен метод SayHello:
  Console.WriteLine(cl.SayHello());  

  retrun; //все..


 }
}
}


Да, вот еще что.. Если нужно прямо обратиться к некоторому интерфейсу:
Код
_myCLASS imyclass = cl; //не забыв перед этим: myCLASS cl = new myCLASS();
//...
Console.WriteLine(imyclass.SayHello());


Вышесказанное относится только к РАННЕМУ СВЯЗЫВАНИЮ - при позднем связывании чуток по-другому - там tlbimp бесполезен (если надо - могу рассказать..).
Кстати, взаимодействие COM->.NET (т.е COM вызывает .NET-сборку) основано на похожей технологии - там существует прослойка (CCW - COM Callable Wrapper - оболочка для COM с возможностью вызова) - и COM "считает", что .NET-сборка - обычный COM-модуль.

Все.
Enjoy it.
Как говорится, omne ignotum pro magnifico. smile.gif



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
ElectricalStorm
Дата 10.3.2004, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



спасибо посмотрю !


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Kurt
Дата 14.3.2004, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



И как? Опробовал?
Можь, я где ошибся?..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
ElectricalStorm
Дата 7.4.2004, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



Напишите статью про СОМ и C# все будет интересно.... smile.gif


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Kurt
Дата 8.4.2004, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Хм..
Можно было бы..
Заодно и использование .NET-сборок в COM упомянуть..
Тока.. Я, ИМХО, не подойду - ни разу не пробовал писать статьи, да и с COM ничего серьезного. Так, по мелочи.
Кто возьмется?

Стоп. А разве готового в сети ничего нету? Или нужен "свежий взгляд"? smile.gif

Это сообщение отредактировал(а) Kurt - 8.4.2004, 01:59


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
ElectricalStorm
Дата 9.4.2004, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



А Вы попробуйте ...просто изложить свои знания на бумаге по COM м С# smile.gif

готового не видел ... да и свежий взгляд был бы кстати


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Guest_Sergey
Дата 19.4.2004, 06:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(ElectricalStorm @ 9.4.2004, 14:57)
А Вы попробуйте ...

В самом деле, это будет очень полезно и для нас и для вас (изложение на бумаге упорядочивает мысли). Особенно, конечно, для нас. А уж благодарные читатели будут помнить вас вечно.
  Вверх
Kurt
Дата 20.4.2004, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Попробуем..
Можь че и получится.. smile.gif

Это сообщение отредактировал(а) Kurt - 22.4.2004, 00:00


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Shtorm
Дата 16.3.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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# не знаю....
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.