Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426

OPC сервер: описать интерфейс IConnectionPointContainer

27.04.2012, 09:51. Показов 3965. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, пишу OPC сервер все методы интерфейсов стандарта OPC описал, а вот с описанием интерфейса IConnectionPointContainer не получается.

пока только есть
C#
1
2
3
4
5
6
7
8
9
10
11
#region **** _________________IConnectionPointContainer________________ ****
        public void EnumConnectionPoints( out IEnumConnectionPoints ppEnum )
        {
            throw new NotImplementedException();
        }
 
        public void FindConnectionPoint( ref Guid riid, out IConnectionPoint ppCP )
        {
            throw new NotImplementedException();
        }
        #endregion
еще в интернете нарыл код, но как ним пользоваться не знаю
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/// <summary>
    /// Class used to identify a source of events of type SinkType.
    /// </summary>
    [ComVisible(false)]
    public interface IEventSource<SinkType>
        where SinkType : class
    {
        void OnSinkAdded(SinkType sink);
        void OnSinkRemoved(SinkType sink);
    }
 
    [ComVisible( true )]
    public class ConnectionPointContainer : IConnectionPointContainer
    {
        private Dictionary<Guid, IConnectionPoint> connectionPoints;
        public ConnectionPointContainer()
        {
            connectionPoints = new Dictionary<Guid, IConnectionPoint>();
        }
        public void AddEventSource<SinkType>( IEventSource<SinkType> source )
            where SinkType : class
        {
            if (null == source)
                throw new ArgumentNullException( "source" );
            if (connectionPoints.ContainsKey( typeof( SinkType ).GUID ))
                throw new ArgumentException( "EventSource guid already added to the list of connection points", "source" );
            connectionPoints.Add( typeof( SinkType ).GUID, new ConnectionPoint<SinkType>( this, source ) );
        }
 
        #region IConnectionPointContainer Members
        void IConnectionPointContainer.EnumConnectionPoints( out IEnumConnectionPoints ppEnum )
        {
            throw new NotImplementedException(); ;
        }
        void IConnectionPointContainer.FindConnectionPoint( ref Guid riid, out IConnectionPoint ppCP )
        {
            ppCP = connectionPoints[riid];
        }
        #endregion
    }
 
    public class ConnectionPoint<SinkType> : IConnectionPoint
        where SinkType : class
    {
        Dictionary<int, SinkType> sinks;
        private int nextCookie;
        private ConnectionPointContainer container;
        private IEventSource<SinkType> source;
        public ConnectionPoint(ConnectionPointContainer container, IEventSource<SinkType> source)
        {
            if(null == container)
                throw new ArgumentNullException("container");
            if(null == source)
                throw new ArgumentNullException("source");
            this.container = container;
            this.source = source;
            sinks = new Dictionary<int, SinkType>();
            nextCookie = 1;
        }
        #region IConnectionPoint Members
        public void Advise(object pUnkSink, out int pdwCookie)
        {
            SinkType sink = pUnkSink as SinkType;
            if(null == sink)
                Marshal.ThrowExceptionForHR(AM.Common.HRESULTS.E_NOINTERFACE);
            sinks.Add(nextCookie, sink);
            pdwCookie = nextCookie;
            source.OnSinkAdded(sink);
            nextCookie += 1;
        }
 
        public void EnumConnections(out IEnumConnections ppEnum)
        {
            throw new NotImplementedException(); ;
        }
 
        public void GetConnectionInterface(out Guid pIID)
        {
            pIID = typeof(SinkType).GUID;
        }
 
        public void GetConnectionPointContainer(out IConnectionPointContainer ppCPC)
        {
            ppCPC = this.container;
        }
 
        public void Unadvise(int dwCookie)
        {
            SinkType sink = sinks[dwCookie];
            sinks.Remove(dwCookie);
            source.OnSinkRemoved(sink);
        }
        #endregion
    }
если у кого есть какие идеи - всему буду рад.

Добавлено через 18 часов 47 минут
тема еще актуальна!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2012, 09:51
Ответы с готовыми решениями:

OPC сервер
Кто-нибудь работал с OPC сервером и есть ли какие-нибудь бесплатные библиотеки под .NET? Спасибо. Добавлено через 2 минуты Хорошо...

Клиент для OPC сервер Kepware и удаленное подключение
Добрый день, подскажите пожалуйста. Есть маленький клиент на c#, который читает значения тегов и записывает в них значения. Сервер OPC...

Описать интерфейс IVector, соответствующий векторам
Здравствуйте! Пытаюсь решить следующую задачу: Описать интерфейс IVector, соответствующий векторам. Он должен содержать методы: ...

3
 Аватар для mikhail_g
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
27.04.2012, 16:07
Не совсем по теме, но есть готовые библиотеки для работы с ОРС серверами, и для создание оных
0
 Аватар для Sanprof
96 / 96 / 16
Регистрация: 28.01.2008
Сообщений: 426
27.04.2012, 16:51  [ТС]
Цитата Сообщение от mikhail_g Посмотреть сообщение
есть готовые библиотеки для работы с ОРС серверами
а теперь представьте, что я потратил кучу времени на написание кода с использованием оных библиотек, а потом выпускается обновление (к примеру платное) и что тогда. Вобщем я мало когда использую сторонние компоненты (сторонних производителей) без исходных кодов.

P.S.
В принципе я уже сам разобрался с кодом который выше в моем посте. Вопрос можно решать решенным.
0
 Аватар для mikhail_g
192 / 147 / 27
Регистрация: 02.05.2011
Сообщений: 467
28.04.2012, 12:43
а теперь представьте, что я потратил кучу времени на написание кода с использованием оных библиотек, а потом выпускается обновление (к примеру платное) и что тогда. Вобщем я мало когда использую сторонние компоненты (сторонних производителей) без исходных кодов.
На сайте opcfoundation.org лежат и доступны (только для членов, поэтому искать надо на рутрекере, я качал оттуда) официальные библиотеки, а так же исходные коды. Но это к делу уже не отсносится)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2012, 12:43
Помогаю со студенческими работами здесь

VB и OPC сервер
Всем доброго дня! Пишу простой OPC клиент, который должен читать с OPC сервера данные. В ходе написания возникла одна проблема, на...

OPC - сервер
Имеется следующая проблема: на одной машине установлен ОРС-сервер и клиент. для Microsoft Windows XP Professional Service Pack 2 ...

OPC сервер
Здравствуйте! Ситуация такая: необходимо передать данные из codesys (контроллера нет - использую эмуляцию), через OPC-сервер, в...

Резервированный OPC-сервер
Добрый день! Совсем недавно получил в свои руки систему диспетчерского управления одного из предприятий энергетики. И уже заметил пару...

OPC сервер для Modbus
Добрый день. Необходима информация, если кто обладает, об архитектуре OPC серверов. Сейчас возникла потребность в создании своего сервера....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru