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

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

?? opcutils.~pas

?? DELPHI編寫OPC(一): 編寫OPC客戶端程序
?? ~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}
{$IFDEF VER180}
  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
     // Writeln('Item0Handle:',@ItemServerHandle);
      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一区二区三区免费野_久草精品视频
美国十次了思思久久精品导航| 亚洲宅男天堂在线观看无病毒| 欧美日韩在线电影| 欧美色图在线观看| 欧美三区在线观看| 欧美一卡二卡三卡| 精品动漫一区二区三区在线观看| 日韩亚洲欧美综合| 日韩精品一区二区在线观看| 精品精品欲导航| 26uuu亚洲综合色| 久久精品水蜜桃av综合天堂| 国产日韩成人精品| 亚洲女女做受ⅹxx高潮| 亚洲综合一区二区三区| 日本不卡1234视频| 国产成人亚洲综合色影视| 成人免费视频网站在线观看| 99这里只有久久精品视频| 不卡的av网站| 欧美色中文字幕| 精品嫩草影院久久| 国产精品久久久一本精品 | 欧美一级一区二区| 久久精品一区二区三区不卡牛牛| 欧美高清在线视频| 亚洲国产成人高清精品| 日日夜夜免费精品| 国产白丝网站精品污在线入口| 成人18精品视频| 91精品国模一区二区三区| 久久亚洲二区三区| 一区二区三区高清在线| 久久99精品久久久久久久久久久久| 国产91高潮流白浆在线麻豆| 91一区二区在线观看| 日韩视频在线观看一区二区| 国产精品免费视频网站| 偷拍日韩校园综合在线| 国产91精品精华液一区二区三区 | 亚洲精品视频一区| 久久成人免费网| 色婷婷亚洲综合| 国产日韩欧美在线一区| 午夜精品久久久久久不卡8050| 国产精品一区二区不卡| 欧美撒尿777hd撒尿| 中文字幕精品一区| 另类小说色综合网站| 91久久精品一区二区三| 国产亚洲精品资源在线26u| 图片区日韩欧美亚洲| 99久久99久久久精品齐齐| 日韩精品一区二区三区在线播放 | 一本色道综合亚洲| 久久久久免费观看| 日韩黄色一级片| 欧美在线观看视频在线| 国产精品高潮呻吟| 国产高清在线观看免费不卡| 欧美精品电影在线播放| 亚洲三级视频在线观看| 成人免费观看av| 欧美激情一区二区三区全黄| 久久国产日韩欧美精品| 欧美日韩情趣电影| 亚洲免费高清视频在线| 国产99久久久国产精品免费看| 精品国产1区二区| 美女网站色91| 69精品人人人人| 亚洲国产aⅴ天堂久久| 欧美丝袜丝交足nylons| 伊人色综合久久天天| 91蜜桃在线观看| 亚洲欧美日韩人成在线播放| 色综合一区二区| 亚洲蜜桃精久久久久久久| 成人永久aaa| 中文字幕欧美国产| 成人免费毛片高清视频| 国产精品拍天天在线| www.欧美精品一二区| 亚洲欧洲av在线| 一本一道波多野结衣一区二区| 最新热久久免费视频| 99久久精品情趣| 一区二区三区中文字幕电影| 欧美性受极品xxxx喷水| 日本亚洲三级在线| 久久人人爽爽爽人久久久| 国产91精品入口| 一区二区三区在线看| 7777精品伊人久久久大香线蕉完整版 | 中文字幕一区二区三区精华液| eeuss鲁片一区二区三区在线观看| 国产精品网站在线| 欧美性大战久久久久久久| 五月婷婷激情综合| 精品国产乱码久久久久久久| 国产精品一区二区三区乱码| 国产精品国产馆在线真实露脸| 日本久久电影网| 美女精品一区二区| 欧美国产综合一区二区| 91热门视频在线观看| 午夜精品福利视频网站| 国产女人18毛片水真多成人如厕| 99久久国产综合色|国产精品| 午夜精品久久久久久久99水蜜桃| 337p日本欧洲亚洲大胆色噜噜| 成人高清在线视频| 亚洲福利电影网| 国产午夜精品久久| 欧美日韩精品欧美日韩精品| 国产成人在线免费观看| 婷婷久久综合九色国产成人| 久久久av毛片精品| 在线成人av影院| 波多野结衣中文字幕一区| 男人的j进女人的j一区| 综合电影一区二区三区| 欧美sm极限捆绑bd| 欧美日韩一区二区电影| 成人午夜av影视| 韩国精品免费视频| 日韩精品视频网站| 亚洲欧洲国产日韩| 久久久久久久久久电影| 91精品国产91久久久久久一区二区| 成人av网在线| 国产一区999| 麻豆91精品视频| 亚洲国产视频网站| 亚洲欧美电影一区二区| 久久久精品国产免大香伊| 欧美日韩aaaaaa| 欧美在线免费播放| 色婷婷久久久综合中文字幕 | 激情综合色播激情啊| 香蕉久久夜色精品国产使用方法| 国产精品欧美经典| 欧美韩国日本综合| 国产视频一区在线播放| 精品国产乱码久久久久久蜜臀| 在线一区二区三区四区| 91蜜桃免费观看视频| av网站一区二区三区| 国产**成人网毛片九色| 国产在线观看免费一区| 久久99精品久久久久久国产越南 | 国产精品一区二区在线看| 麻豆免费精品视频| 经典三级视频一区| 国产在线视频精品一区| 国产精品538一区二区在线| 国产精品一区二区在线播放| 国产激情一区二区三区四区| 懂色av一区二区三区免费看| 国产精品77777| av一二三不卡影片| 91久久精品午夜一区二区| 欧美视频一区在线| 91精品国产综合久久久久久久久久| 欧美一区二区三区免费观看视频 | 天堂在线亚洲视频| 美女任你摸久久| 国产高清视频一区| av一本久道久久综合久久鬼色| 91久久精品网| 91精品久久久久久久99蜜桃| 精品日韩一区二区三区| 久久精品一区八戒影视| 中文字幕一区视频| 亚洲成av人片一区二区| 亚洲永久精品大片| 精彩视频一区二区| 色综合久久88色综合天天| 欧美日本一区二区在线观看| 精品国产自在久精品国产| 国产精品美女视频| 依依成人精品视频| 日韩精品高清不卡| 国产suv一区二区三区88区| 99re热这里只有精品免费视频| 欧美视频精品在线观看| 精品欧美久久久| 亚洲日本在线看| 日韩高清在线不卡| www.欧美日韩国产在线| 欧美日韩激情一区二区三区| 日韩女优电影在线观看| 中文字幕亚洲电影| 久久国产精品色婷婷| 91精品91久久久中77777| 精品国产三级电影在线观看| 亚洲免费在线电影| 久久精品国产久精国产| 色偷偷一区二区三区| 久久久精品人体av艺术|