Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

Требуется помощь по IConnectionPointContainer   Найти похожие ветки 

 
AbrosimovA   (2005-07-06 11:31) [0]

Я решил в познавательных целях позаниматься вопросом создания OPC клиента для WinCC 5.0. Не понимаю как получить ссылку на интерфейс  IConnectionPointContainer. К серверу OPCServer.WinCC я подключаюсь нормально; удаётся прочитать дерево элементов из проекта WinCC, но дальше мне нужно получить информацию (например, тип и значение) каждого тэга. Так вот для этого мне нужен IConnectionPointContainer.


 
Набережных С   (2005-07-07 16:52) [1]

>Не понимаю как получить ссылку на интерфейс  IConnectionPointContainer

Просто запросить его у сервера. С помощью QueryInterface. Или обертки InterfaceConnect из ComObj.


 
AbrosimovA   (2005-07-07 18:24) [2]

Я примерно делаю так:

var ServerIf: IOPCServer;
   Container: IConnectionPointContainer;
   

function Connect(ServerName: string): Boolean;
begin
if Trim(ServerName) <> "" then
begin
 ServerProgID:=StringToOleStr(ServerName);
 HR:=CLSIDFromProgID(ServerProgID,ServerCLSID);
 try
  ServerIf:=CreateComObject(ServerCLSID) as IOPCServer;
 except
  ServerIf := nil;
  LErrorInfo.Caption:="Класс не зарегистрирован";
  Exit;
 end;
 ServerIf.QueryInterface(IID_IConnectionPointContainer,Container);
 Result:=true;
end;
end;  


..., но Container = nil.

Попробую с InterfaceConnect.


 
Forester ©   (2005-07-12 14:16) [3]

IConnectionPointContainer используется в сервере для
1) получения извещения о закрытии сервера через callback интерфейс IOPCSShutdown (OPC Server object)
2) для передачи данных через IOPCDataCallBack (OPC Group Object)

т.е необходимо, чтобы клиент реализовывал данные интерфейсы, а при подключении "регистрировал" себя на сервере

TClientDA2 = class(TComponent, IOPCShutdown, IOPCDataCallBack)
 private
  ...
  FSrvConnection:integer; // идентификатор подключения
  ...

 protected
  // Процедура подписывает клиент на запрос об отключении cервера
   procedure AdviseClient;

 ...

implementation
 procedure TClientDA2.AdviseClient;
var
 ConnectionPointContainer: IConnectionPointContainer;
 ConnectionPoint: IConnectionPoint;
 opResult:HRESULT;
begin
 try
   ConnectionPointContainer:=(FServer as IConnectionPointContainer);
 except
   ConnectionPointContainer:=nil;
 end;
 if ConnectionPointContainer <> nil then
 begin
   opResult:=ConnectionPointContainer.FindConnectionPoint(IID_IOPCShutdown,
     ConnectionPoint);
   if Succeeded(opResult) and (ConnectionPoint<>nil) then
     ConnectionPoint.Advise(Self as IUnknown, FSrvConnection);
 end;
end;

Пример привел из собственноручно написанного компонента, работающего весьма успешно.


 
Forester ©   (2005-07-12 14:17) [4]

Sorry!

1) получения извещения о закрытии сервера через callback интерфейс IOPCSShutdown (OPC Server object)

читать как

1) передачи извещения клиенту о закрытии сервера через callback интерфейс IOPCSShutdown (OPC Server object)


 
k2 ©   (2005-07-13 12:11) [5]

может быть полезен пример модуля SinkObject от Бина Ли
http://www.techvanguards.com


 
AbrosimovA   (2005-07-13 14:32) [6]

Пример был-бы кстати.


 
k2 ©   (2005-07-14 03:38) [7]

AbrosimovA   (13.07.05 14:32)
Пример был-бы кстати.


лучше по линку пойти, там много интересного



Страницы: 1 вся ветка

Текущий архив: 2006.07.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
4-1142674875
S_T_E_P_A_N___
2006-03-18 12:41
2006.07.02
Цвет Windows Desktop


1-1148499979
mikl000
2006-05-24 23:46
2006.07.02
буквенно-цифровые коды


15-1149411044
Галинка
2006-06-04 12:50
2006.07.02
Где найти книги по C#


2-1150120811
nickhilo
2006-06-12 18:00
2006.07.02
Использование плагина docfile far а в проектах на delphi.


15-1149587106
tButton
2006-06-06 13:45
2006.07.02
странно... не смог найти ветку про то чья луна