Форум: "Corba";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизТребуется помощь по 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 вся ветка
Форум: "Corba";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c