@MaxLich
java developer

Как создать COM-объект в программе на C#?

Здравствуйте. Я джавист, и в шарпе ни ухом, ни рылом, но мне нужно на си шарпе создать ком-объект. Объект используется для общения с оборудованием. Разработчиками оборудования даётся dll-библиотека, я её зарегистрировал. Остался из самой программы его получить, и дальше с ним работать. В руководстве сказано так:

Для регистрации COM-объекта необходимо выполнить следующие действия:
1. Зарегистрировать PERCo_S20_SDK.DLL при помощи regsvr32.exe (regsvr32.exe PERCo_S20_SDK.dll).
2. В программном обеспечении, осуществляющем работу с S-20, создать COM-объект: CreateOleObject(‘PERCo_S20_SDK.ExchangeMain’) или CreateComObject('{E74FA501-350F-43CF-8C15-D831778FD465}').
3. Для дальнейшей работы использовать методы созданного COM-объекта.

Не могу понять, как реализовать второй пункт. Может кто-нибудь расписать подробно для новичка!?

UPD: Нашёл пример на шарпе для работы с этим оборудованием, вот ссылка: www.cyberforum.ru/csharp-net/thread1578682.html
Кусок кода оттуда:
CoExchangeMain oPERCo = new CoExchangeMain();
 int iRet = oPERCo.SetConnect(Server, Port, Login, Passwd);
 if (iRet != 0)
 {
    throw new ApplicationException("Ошибка подключения");
 } else {
    Console.WriteLine("Успешно подключились");
    bConnected = true;
 }

То есть здесь первой строчкой и создаётся нужный мне объект!?
  • Вопрос задан
  • 6262 просмотра
Решения вопроса 2
@cicatrix
было бы большой ошибкой думать
Это называется Runtime Callable Wrapper или RCW.
В большинстве случаев после регистрации COM компонента (в вашем списке под №1) достаточно просто добавить в проект ссылку на этот компонент (Add Reference) и импортировать пространство имён.
От себя лишь добавлю, что работа с COM может приводить к утечкам памяти - сборщик мусора там не всегда справляется, так что подчищайте память за собой после работы.

"Под капотом", если на пальцах, то CLR сгенерит "обёртку" вашего COM объекта (wrapper assembly), с которой вы и будете работать. Никаких CreateObject делать не надо (это для PowerShell или VBS больше актуально).
Ответ написан
@MaxLich Автор вопроса
java developer
Как понял, решение:
CoExchangeMain oPERCo = new CoExchangeMain();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
Ну скорее тут более правильный термин не создать - ибо путает и вначале провоцирует на мысли в сторону "как на с# написать ocx " -))

А так собственно:
public PERCo_S20_SDK myobject = new PERCo_S20_SDK();
и дальше пользуемся
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы