亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? opcutils.pas

?? OPC SERVER delphi源代碼
?? PAS
字號:
unit OPCutils;

{$IFDEF VER150}
{$WARN UNSAFE_CODE OFF}
{$WARN UNSAFE_TYPE OFF}
{$ENDIF}
{$IFDEF VER170}
{$WARN UNSAFE_CODE OFF}
{$ENDIF}

interface

uses
{$IFDEF VER140}
  Variants,
{$ENDIF}
{$IFDEF VER150}
  Variants,
{$ENDIF}
{$IFDEF VER170}
  Variants,
{$ENDIF}
  Windows, ActiveX, OPCtypes, OPCDA;

function ServerAddGroup(ServerIf: IOPCServer; Name: string; Active: BOOL;
          UpdateRate: DWORD; ClientHandle: OPCHANDLE; var GroupIf: IOPCItemMgt;
          var ServerHandle: OPCHANDLE): HResult;
function GroupAddItem(GroupIf: IOPCItemMgt; ItemID: string;
          ClientHandle: OPCHANDLE; DataType: TVarType;
          var ServerHandle: OPCHANDLE; var CanonicalType: TVarType): HResult;
function GroupRemoveItem(GroupIf: IOPCItemMgt;
          ServerHandle: OPCHANDLE): HResult;
function GroupAdviseTime(GroupIf: IUnknown; Sink: IAdviseSink;
          var AsyncConnection: Longint): HResult;
function GroupUnAdvise(GroupIf: IUnknown; AsyncConnection: Longint): HResult;
function GroupAdvise2(GroupIf: IUnknown; OPCDataCallback: IOPCDataCallback;
          var AsyncConnection: Longint): HResult;
function GroupUnadvise2(GroupIf: IUnknown;
          var AsyncConnection: Longint): HResult;
function ReadOPCGroupItemValue(GroupIf: IUnknown; ItemServerHandle: OPCHANDLE;
          var ItemValue: string; var ItemQuality: Word): HResult;
function WriteOPCGroupItemValue(GroupIf: IUnknown; ItemServerHandle: OPCHANDLE;
          ItemValue: OleVariant): HResult;

implementation

// utility functions wrapping OPC methods

// wrapper for IOPCServer.AddGroup
function ServerAddGroup(ServerIf: IOPCServer; Name: string; Active: BOOL;
          UpdateRate: DWORD; ClientHandle: OPCHANDLE; var GroupIf: IOPCItemMgt;
          var ServerHandle: OPCHANDLE): HResult;
var
  PercentDeadBand: Single;
  RevisedUpdateRate: DWORD;
begin
  Result := E_FAIL;
  if ServerIf <> nil then
  begin
    PercentDeadBand := 0.0;
    Result := ServerIf.AddGroup(PWideChar(WideString(Name)), Active, UpdateRate,
                            ClientHandle, nil, @PercentDeadBand, 0,
                            ServerHandle, RevisedUpdateRate, IOPCItemMgt,
                            IUnknown(GroupIf));
  end;
  if Failed(Result) then
  begin
    GroupIf := nil;
  end;
end;

// wrapper for IOPCItemMgt.AddItems (single item only)
function GroupAddItem(GroupIf: IOPCItemMgt; ItemID: string;
          ClientHandle: OPCHANDLE; DataType: TVarType;
          var ServerHandle: OPCHANDLE; var CanonicalType: TVarType): HResult;
var
  ItemDef: OPCITEMDEF;
  Results: POPCITEMRESULTARRAY;
  Errors: PResultList;
begin
  if GroupIf = nil then
  begin
    Result := E_FAIL;
    Exit;
  end;
  with ItemDef do
  begin
    szAccessPath := '';
    szItemID := PWideChar(WideString(ItemID));
    bActive := True;
    hClient := ClientHandle;
    dwBlobSize := 0;
    pBlob := nil;
    vtRequestedDataType := DataType;
  end;
  Result := GroupIf.AddItems(1, @ItemDef, Results, Errors);
  if Succeeded(Result) then
  begin
    Result := Errors[0];
    try
      if Succeeded(Result) then
      begin
        ServerHandle := Results[0].hServer;
        CanonicalType := Results[0].vtCanonicalDataType;
      end;
    finally
      CoTaskMemFree(Results[0].pBlob);
      CoTaskMemFree(Results);
      CoTaskMemFree(Errors);
    end;
  end;
end;

// wrapper for IOPCItemMgt.RemoveItems (single item only)
function GroupRemoveItem(GroupIf: IOPCItemMgt;
          ServerHandle: OPCHANDLE): HResult;
var
  Errors: PResultList;
begin
  if GroupIf = nil then
  begin
    Result := E_FAIL;
    Exit;
  end;
  Result := GroupIf.RemoveItems(1, @ServerHandle, Errors);
  if Succeeded(Result) then
  begin
    Result := Errors[0];
    CoTaskMemFree(Errors);
  end;
end;

// wrapper for IDataObject.DAdvise on an OPC group object
function GroupAdviseTime(GroupIf: IUnknown; Sink: IAdviseSink;
          var AsyncConnection: Longint): HResult;
var
  DataIf: IDataObject;
  Fmt: TFormatEtc;
begin
  Result := E_FAIL;
  try
    DataIf := GroupIf as IDataObject;
  except
    DataIf := nil;
  end;
  if DataIf <> nil then
  begin
    with Fmt do
    begin
      cfFormat := OPCSTMFORMATDATATIME;
      dwAspect := DVASPECT_CONTENT;
      ptd := nil;
      tymed := TYMED_HGLOBAL;
      lindex := -1;
    end;
    AsyncConnection := 0;
    Result := DataIf.DAdvise(Fmt, ADVF_PRIMEFIRST, Sink, AsyncConnection);
    if Failed(Result) then
    begin
      AsyncConnection := 0;
    end;
  end;
end;

// wrapper for IDataObject.DUnadvise on an OPC group object
function GroupUnAdvise(GroupIf: IUnknown; AsyncConnection: Longint): HResult;
var
  DataIf: IDataObject;
begin
  Result := E_FAIL;
  try
    DataIf := GroupIf as IDataObject;
  except
    DataIf := nil;
  end;
  if DataIf <> nil then
  begin
    Result := DataIf.DUnadvise(AsyncConnection);
  end;
end;

// wrapper for setting up an IOPCDataCallback connection
function GroupAdvise2(GroupIf: IUnknown; OPCDataCallback: IOPCDataCallback;
          var AsyncConnection: Longint): HResult;
var
  ConnectionPointContainer: IConnectionPointContainer;
  ConnectionPoint: IConnectionPoint;
begin
  Result := E_FAIL;
  try
    ConnectionPointContainer := GroupIf as IConnectionPointContainer;
  except
    ConnectionPointContainer := nil;
  end;
  if ConnectionPointContainer <> nil then
  begin
    Result := ConnectionPointContainer.FindConnectionPoint(IID_IOPCDataCallback,
      ConnectionPoint);
    if Succeeded(Result) and (ConnectionPoint <> nil) then
    begin
      Result := ConnectionPoint.Advise(OPCDataCallback as IUnknown,
        AsyncConnection);
    end;
  end;
end;

// wrapper for cancelling up an IOPCDataCallback connection
function GroupUnadvise2(GroupIf: IUnknown;
          var AsyncConnection: Longint): HResult;
var
  ConnectionPointContainer: IConnectionPointContainer;
  ConnectionPoint: IConnectionPoint;
begin
  Result := E_FAIL;
  try
    ConnectionPointContainer := GroupIf as IConnectionPointContainer;
  except
    ConnectionPointContainer := nil;
  end;
  if ConnectionPointContainer <> nil then
  begin
    Result := ConnectionPointContainer.FindConnectionPoint(IID_IOPCDataCallback,
      ConnectionPoint);
    if Succeeded(Result) and (ConnectionPoint <> nil) then
    begin
      Result := ConnectionPoint.Unadvise(AsyncConnection);
    end;
  end;
end;

// wrapper for IOPCSyncIO.Read (single item only)
function ReadOPCGroupItemValue(GroupIf: IUnknown; ItemServerHandle: OPCHANDLE;
          var ItemValue: string; var ItemQuality: Word): HResult;
var
  SyncIOIf: IOPCSyncIO;
  Errors: PResultList;
  ItemValues: POPCITEMSTATEARRAY;
begin
  Result := E_FAIL;
  try
    SyncIOIf := GroupIf as IOPCSyncIO;
  except
    SyncIOIf := nil;
  end;
  if SyncIOIf <> nil then
  begin
    Result := SyncIOIf.Read(OPC_DS_CACHE, 1, @ItemServerHandle, ItemValues,
                            Errors);
    if Succeeded(Result) then
    begin
      Result := Errors[0];
      CoTaskMemFree(Errors);
      ItemValue := VarToStr(ItemValues[0].vDataValue);
      ItemQuality := ItemValues[0].wQuality;
      VariantClear(ItemValues[0].vDataValue);
      CoTaskMemFree(ItemValues);
    end;
  end;
end;

// wrapper for IOPCSyncIO.Write (single item only)
function WriteOPCGroupItemValue(GroupIf: IUnknown; ItemServerHandle: OPCHANDLE;
          ItemValue: OleVariant): HResult;
var
  SyncIOIf: IOPCSyncIO;
  Errors: PResultList;
begin
  Result := E_FAIL;
  try
    SyncIOIf := GroupIf as IOPCSyncIO;
  except
    SyncIOIf := nil;
  end;
  if SyncIOIf <> nil then
  begin
    Result := SyncIOIf.Write(1, @ItemServerHandle, @ItemValue, Errors);
    if Succeeded(Result) then
    begin
      Result := Errors[0];
      CoTaskMemFree(Errors);
    end;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久尤物电影视频在线观看| 久久影院午夜论| 国产91清纯白嫩初高中在线观看| 热久久免费视频| 热久久免费视频| 久久疯狂做爰流白浆xx| 精品在线免费观看| 国内成人自拍视频| 国产真实乱子伦精品视频| 日本不卡的三区四区五区| 免费精品99久久国产综合精品| 秋霞午夜av一区二区三区| 免费在线看成人av| 国产成人精品一区二区三区网站观看| 国产精品资源网| 成人av资源在线| 一本到不卡免费一区二区| 欧美性做爰猛烈叫床潮| 欧美疯狂性受xxxxx喷水图片| 日韩欧美一级精品久久| 国产精品三级久久久久三级| 国产精品毛片久久久久久久| 亚洲国产日产av| 麻豆91精品91久久久的内涵| 国产美女精品一区二区三区| av一区二区三区黑人| 欧美日韩在线观看一区二区 | 精品在线免费观看| 国产精品一线二线三线精华| 成人精品gif动图一区| 91浏览器入口在线观看| 制服视频三区第一页精品| 欧美成人免费网站| 亚洲欧洲精品一区二区三区| 天天综合色天天综合色h| 国模无码大尺度一区二区三区| 国产xxx精品视频大全| 欧美三电影在线| 国产精品色噜噜| 青椒成人免费视频| 色综合一区二区| 日韩欧美高清在线| 亚洲日本青草视频在线怡红院 | 国产91色综合久久免费分享| 欧美午夜一区二区| 国产女同互慰高潮91漫画| 日日噜噜夜夜狠狠视频欧美人| 国产一区二区三区免费看| 欧美亚洲高清一区二区三区不卡| 精品国产一区二区三区av性色| 亚洲卡通动漫在线| 成人免费毛片app| 日韩美女在线视频| 亚洲成人黄色小说| 91日韩在线专区| 日本一二三不卡| 韩国精品一区二区| 日韩一区二区精品在线观看| 亚洲成人动漫一区| 色天天综合久久久久综合片| 国产欧美va欧美不卡在线| 国产在线不卡一区| 欧美一区二区三区视频免费播放| 亚洲综合激情小说| av资源站一区| 国产免费久久精品| 国产成人免费在线| 久久久久国产成人精品亚洲午夜| 午夜影院久久久| 日本韩国精品在线| 亚洲老妇xxxxxx| 91免费观看国产| 国产精品久久久久三级| 国产成人高清视频| 国产免费成人在线视频| 成人午夜免费视频| 国产精品久久久久久久久免费桃花| 国产精品一区二区在线播放| 日韩欧美高清在线| 国精产品一区一区三区mba桃花 | 欧美va亚洲va香蕉在线| 美日韩黄色大片| 精品福利av导航| 国产伦精品一区二区三区免费迷| 日本一区二区综合亚洲| jizz一区二区| 亚洲色图另类专区| 欧美日韩综合不卡| 日本va欧美va欧美va精品| 精品日韩欧美在线| 国产精品影视天天线| 最新国产精品久久精品| 欧美三级电影网| 奇米一区二区三区av| 国产亚洲精品7777| av一区二区三区四区| 亚洲一区精品在线| 欧美一区二区三区免费视频| 国产精品18久久久久久久久 | 国产精品18久久久久| 欧美激情中文不卡| 欧美在线不卡视频| 久久99热99| 日韩高清国产一区在线| 精品乱人伦小说| 成人黄色在线看| 天天操天天干天天综合网| 欧美精品一区二区精品网| 成a人片国产精品| 婷婷综合另类小说色区| 久久久精品中文字幕麻豆发布| 91丨九色porny丨蝌蚪| 五月天激情小说综合| 中文字幕乱码亚洲精品一区| 欧美在线免费视屏| 国产精品91xxx| 午夜亚洲福利老司机| 国产精品毛片高清在线完整版| 欧美精品乱码久久久久久按摩| 国产1区2区3区精品美女| 天天色天天爱天天射综合| 国产精品水嫩水嫩| 欧美mv和日韩mv国产网站| 91久久精品一区二区二区| 国产美女久久久久| 日韩中文字幕不卡| 亚洲女同女同女同女同女同69| 日韩精品一区二| 欧美日韩三级一区| 成人高清av在线| 国产一区二区网址| 丝袜亚洲另类欧美| 亚洲精品写真福利| 国产精品久久久久三级| 国产日韩精品一区二区浪潮av | 欧美日韩免费在线视频| 成人国产视频在线观看| 国产一区二区伦理片| 日本不卡一区二区三区高清视频| 亚洲黄色录像片| 亚洲免费视频成人| 中文字幕一区免费在线观看| 国产欧美精品区一区二区三区| 精品国产百合女同互慰| 日韩欧美资源站| 欧美一区二区三区成人| 制服.丝袜.亚洲.另类.中文| 欧美日韩国产综合久久| 在线视频国产一区| 日本道色综合久久| 在线视频综合导航| 91福利在线看| 欧美日韩中文一区| 欧美伊人久久久久久久久影院| 91久久国产最好的精华液| 久久精品一区四区| 日本一二三不卡| 国产精品久久久久久久久动漫| 中文字幕第一区综合| 国产精品国产三级国产aⅴ中文| 国产精品乱码久久久久久| 久久久五月婷婷| 中文字幕中文乱码欧美一区二区| 国产精品欧美一区二区三区| 亚洲欧洲无码一区二区三区| 亚洲男人都懂的| 亚洲成人精品一区| 老司机精品视频线观看86| 国产激情偷乱视频一区二区三区 | 亚洲美女精品一区| 亚洲综合久久av| 男女男精品视频网| 国产河南妇女毛片精品久久久| 成人国产视频在线观看| 在线观看国产91| 欧美不卡一区二区三区| 国产精品三级av| 亚洲一区在线播放| 蜜臀久久99精品久久久久久9| 国产精品一区二区久久不卡| 一本色道久久综合亚洲91| 欧美日韩国产成人在线免费| 久久亚洲精精品中文字幕早川悠里| 国产欧美日韩三级| 午夜久久久久久久久| 国产精品18久久久久久久久| 一本久久a久久精品亚洲| 日韩一区二区三区在线| 欧美激情综合在线| 日韩国产欧美一区二区三区| 成人免费视频一区| 欧美精品在线观看播放| 中文字幕不卡的av| 日韩电影在线一区二区三区| 国产91丝袜在线播放| 欧美一级搡bbbb搡bbbb| 亚洲天堂av老司机| 精品亚洲porn| 欧美精品高清视频| 亚洲欧美国产三级|