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

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

?? uopcdataaccess.pas

?? delphi 開發OPc工業通訊 delphi 開發OPc工業通訊
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
//******************************************************************************
// sOPC created by ACHAT SOLUTIONS GmbH, http://www.achat-solutions.de/
//******************************************************************************
unit uOPCDataAccess;

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

interface

uses
  Windows, ComObj, ActiveX, Axctrls, SysUtils, Dialogs, Classes, StdVCL,
  OPCtypes, OPCDA, OPCCOMN, OpcError, uGlobals, uOPCNode, uOPCGroup,
  uOPCStringEnumerator, sOPC_TLB, uOPC, uOPCBrowse;

type
  sOPCDataAccess = class(
    TAutoObject,
    IOPCDataAccess20,
    IOPCServer,
    IOPCCommon,
    IOPCServerPublicGroups,
    IOPCBrowseServerAddressSpace,
    IPersist,
    IPersistFile,
    IConnectionPointContainer,
    IOPCItemProperties)

  protected
    // IPersistFile
    function GetClassID(out classID: TCLSID): HResult; stdcall;

    function IsDirty: HResult; stdcall;

    function Load(pszFileName: POleStr; dwMode: Longint): HResult; stdcall;

    function Save(pszFileName: POleStr; fRemember: BOOL): HResult; stdcall;

    function SaveCompleted(pszFileName: POleStr): HResult; stdcall;

    function GetCurFile(out pszFileName: POleStr): HResult; stdcall;

    // IConnectionPointContainer
    function EnumConnectionPoints(out Enum: IEnumConnectionPoints): HResult; stdcall;

    function FindConnectionPoint(const iid: TIID; out cp: IConnectionPoint): HResult; stdcall;

    // IOPCServer
    function AddGroup(szName:POleStr; bActive: BOOL; dwRequestedUpdateRate: DWORD;
      hClientGroup: OPCHANDLE; pTimeBias: PLongint; pPercentDeadband: PSingle;
      dwLCID: DWORD; out phServerGroup: OPCHANDLE; out pRevisedUpdateRate: DWORD;
      const riid: TIID; out ppUnk: IUnknown): HResult; stdcall;

    function GetErrorString(dwError: HResult; dwLocale: TLCID;
      out ppString: POleStr): HResult; overload; stdcall;

    function GetGroupByName(szName: POleStr; const riid: TIID;
      out ppUnk: IUnknown): HResult; stdcall;

    function GetStatus(out ppServerStatus: POPCSERVERSTATUS): HResult; stdcall;

    function RemoveGroup(hServerGroup: OPCHANDLE; bForce: BOOL): HResult; stdcall;

    function CreateGroupEnumerator(dwScope: OPCENUMSCOPE; const riid: TIID;
      out ppUnk: IUnknown): HResult; stdcall;

    // IOPCCommon
    function SetLocaleID(dwLcid: TLCID): HResult; stdcall;

    function GetLocaleID(out pdwLcid: TLCID): HResult; stdcall;

    function QueryAvailableLocaleIDs(out pdwCount: UINT; out pdwLcid: PLCIDARRAY): HResult; stdcall;

    function GetErrorString(dwError: HResult; out ppString: POleStr): HResult; overload; stdcall;

    function SetClientName(szName: POleStr): HResult; stdcall;

    // IOPCServerPublicGroups
    function GetPublicGroupByName(szName: POleStr; const riid: TIID;
      out ppUnk: IUnknown): HResult; stdcall;

    function RemovePublicGroup(hServerGroup: OPCHANDLE; bForce: BOOL): HResult; stdcall;

    // IOPCBrowseServerAddressSpace
    function QueryOrganization(out pNameSpaceType: OPCNAMESPACETYPE): HResult; stdcall;

    function ChangeBrowsePosition(dwBrowseDirection: OPCBROWSEDIRECTION;
      szString: POleStr): HResult; stdcall;

    function BrowseOPCItemIDs(dwBrowseFilterType: OPCBROWSETYPE; szFilterCriteria: POleStr;
      vtDataTypeFilter: TVarType; dwAccessRightsFilter: DWORD;
      out ppIEnumString: IEnumString): HResult; stdcall;

    function GetItemID(szItemDataID: POleStr; out szItemID: POleStr): HResult; stdcall;

    function BrowseAccessPaths(szItemID: POleStr; out ppIEnumString: IEnumString): HResult; stdcall;

    // IOPCItemProperties
    function QueryAvailableProperties(szItemID: POleStr; out pdwCount: DWORD;
      out ppPropertyIDs: PDWORDARRAY; out ppDescriptions: POleStrList;
      out ppvtDataTypes: PVarTypeList): HResult; stdcall;

    function GetItemProperties(szItemID: POleStr; dwCount: DWORD;
      pdwPropertyIDs: PDWORDARRAY; out ppvData: POleVariantArray;
      out ppErrors: PResultList): HResult; stdcall;

    function LookupItemIDs(szItemID: POleStr; dwCount: DWORD; pdwPropertyIDs: PDWORDARRAY;
      out ppszNewItemIDs: POleStrList; out ppErrors: PResultList): HResult; stdcall;

  protected
    FOPCBrowse: sOPCBrowse;
    FOPCGroup: TList;
    FLcid: TLCID;
    FClientName: string;
    FStartTime: TDateTime;
    FLastDataUpdateToClient: TDateTime;

    FConnectionPoints: TConnectionPoints;
    FShutdown: TConnectionPoint;
    FConnectEvent: TConnectEvent;
    FClientIUnknown: IUnknown;

    procedure ConnectEvent(const Sink: IUnknown; Connecting: Boolean);

    procedure RemoveGroupByHandle(hServerGroup: OPCHANDLE);
    // removes the group 'hServerGroup' out of the group list and free's the group

    function CreateGroupNameList(Mode: integer): TStringList; virtual;
    // create a list of group names, the calling method must release the list!
    // Mode: 0 = list of private groups, 1 = list of public groups
    //       2 = list of private and public groups

    function FindGroupByName(Name: string; var ix: integer): sOPCGroup; virtual;
    // returns Group if 'Name' is found in private or public list

    function FindGroupByHandle(hServerGroup: OPCHANDLE; var ix: integer): sOPCGroup; virtual;
    // returns Group if 'hServerGroup' is found in private or public list

  public
    procedure Initialize; override;

    destructor Destroy; override;

    function ShutDown: boolean;

    function GroupCount(PublicFlag: boolean): integer; virtual;

    function GenerateUniqueGroupName(var Name: string): boolean;
    // generates a unique group name ouf of 'Name'
    // True -> new name generated

    function ChangeGroupToPublic(Name: string): HResult;

    procedure AddOPCGroup(OPCGroup: sOPCGroup);

    property LastDataUpdateToClient: TDateTime read FLastDataUpdateToClient
      write FLastDataUpdateToClient;
  end;

implementation

uses
  ComServ,
  uRegister;

//******************************************************************************
// IPersistFile
//******************************************************************************
function sOPCDataAccess.GetClassID(out classID: TCLSID): HResult; stdcall;
begin
  Result := S_FALSE;
end;

function sOPCDataAccess.IsDirty: HResult; stdcall;
begin
  Result := S_FALSE;
end;

function sOPCDataAccess.Load(pszFileName: POleStr; dwMode: Longint): HResult; stdcall;
begin
  Result := S_FALSE;
end;

function sOPCDataAccess.Save(pszFileName: POleStr; fRemember: BOOL): HResult; stdcall;
begin
  Result := S_FALSE;
end;

function sOPCDataAccess.SaveCompleted(pszFileName: POleStr): HResult; stdcall;
begin
  Result := S_FALSE;
end;

function sOPCDataAccess.GetCurFile(out pszFileName: POleStr): HResult; stdcall;
begin
  Result := S_FALSE;
end;

//******************************************************************************
// IConnectionPointContainer
//******************************************************************************
function sOPCDataAccess.EnumConnectionPoints(out Enum: IEnumConnectionPoints):HResult; stdcall;
begin
  Result := E_NOTIMPL;
end;

function sOPCDataAccess.FindConnectionPoint(const iid: TIID; out cp: IConnectionPoint): HResult; stdcall;
begin
  if (addr(cp) = nil) then begin
    Result := E_INVALIDARG;
    exit;
  end;
  if IsEqualGuid(iid, IID_IOPCShutdown) then begin
    cp := FShutdown;
    Result := S_OK;
  end else
    Result := E_NOINTERFACE;
end;

//******************************************************************************
// IOPCServerIMPL
//******************************************************************************
function sOPCDataAccess.AddGroup(szName: POleStr; bActive: BOOL;
  dwRequestedUpdateRate: DWORD; hClientGroup: OPCHANDLE; pTimeBias: PLongint;
  pPercentDeadband: PSingle; dwLCID: DWORD; out phServerGroup: OPCHANDLE;
  out pRevisedUpdateRate: DWORD; const riid: TIID; out ppUnk: IUnknown): HResult; stdcall;
var
  newName: string;
  OPCGroup: sOPCGroup;
begin
  newName := szName;
  if not GenerateUniqueGroupName(newName) then begin
    Result := OPC_E_DUPLICATENAME;
    exit;
  end;

  OPCGroup := sOPCGroup.Create(self);
  if OPCGroup = nil then begin
    Result := E_OUTOFMEMORY;
    phServerGroup := 0;
    exit;
  end;

  FOPCGroup.Add(OPCGroup);
  OPCGroup.Init(newName, bActive, dwRequestedUpdateRate, hClientGroup, pTimeBias, pPercentDeadband, dwLCID);
  phServerGroup := OPCGroup.ServerGroup;
  pRevisedUpdateRate := OPCGroup.RequestedUpdateRate;

  ppUnk := OPCGroup;
  Result := S_OK;
end;

function sOPCDataAccess.GetErrorString(dwError: HResult; dwLocale: TLCID;
  out ppString: POleStr): HResult; stdcall;
begin
  ppString := StringToLPOLESTR('Unknown Error Code: ' + IntToStr(dwError));
  Result := S_OK;
end;

function sOPCDataAccess.GetGroupByName(szName: POleStr; const riid: TIID;
  out ppUnk: IUnknown): HResult; stdcall;
var
  OPCGroup: sOPCGroup;
  ix: integer;
begin
  OPCGroup := FindGroupByName(szName, ix);
  if (addr(ppUnk) = nil) or (OPCGroup = nil) then begin
    Result := E_INVALIDARG;
    exit;
  end;
  Result := IUnknown(OPCGroup).QueryInterface(riid, ppUnk);
end;

function sOPCDataAccess.GetStatus(out ppServerStatus: POPCSERVERSTATUS): HResult; stdcall;
begin
  if (addr(ppServerStatus) = nil) then begin
    Result := E_INVALIDARG;
    exit;
  end;

  ppServerStatus := TaskMemAlloc(0, mkServerStatus, Result);
  if ppServerStatus = nil then exit;

  Result := S_OK;
  ppServerStatus.ftStartTime      := ConvertToFileTime(FStartTime);
  ppServerStatus.ftCurrentTime    := ConvertToFileTime(Now);
  ppServerStatus.ftLastUpdateTime := ConvertToFileTime(FLastDataUpdateToClient);
  ppServerStatus.dwServerState    := OPC_STATUS_RUNNING;
  ppServerStatus.dwGroupCount     := GroupCount(False) + GroupCount(True);
  ppServerStatus.dwBandWidth      := $FFFFFFFF;
  ppServerStatus.wMajorVersion    := 1;
  ppServerStatus.wMinorVersion    := 1;
  ppServerStatus.wBuildNumber     := 1;
  ppServerStatus.szVendorInfo     := 'sOPC created by ACHAT SOLUTIONS GmbH, http://www.achat-solutions.de/';
end;

function sOPCDataAccess.RemoveGroup(hServerGroup: OPCHANDLE; bForce: BOOL): HResult; stdcall;
// This function should not be called for Public Groups!
begin
  RemoveGroupByHandle(hServerGroup);
  Result := S_OK;
end;

function sOPCDataAccess.CreateGroupEnumerator(dwScope: OPCENUMSCOPE;
  const riid: TIID; out ppUnk: IUnknown): HResult; stdcall;
var
  Mode: integer;
begin
  Result := S_OK;
  Mode := 0;
  case dwScope of
    OPC_ENUM_PRIVATE_CONNECTIONS, OPC_ENUM_PRIVATE: Mode := 0;
    OPC_ENUM_PUBLIC_CONNECTIONS, OPC_ENUM_PUBLIC:   Mode := 1;
    OPC_ENUM_ALL_CONNECTIONS, OPC_ENUM_ALL:         Mode := 2;
  end;
  ppUnk := sOPCStringEnumerator.Create(CreateGroupNameList(Mode));
end;

//******************************************************************************
// IOPCCommonIMPL
//******************************************************************************
function sOPCDataAccess.SetLocaleID(dwLcid: TLCID): HResult; stdcall;
begin
  FLcid := dwLcid;
  Result := S_OK;
end;

function sOPCDataAccess.GetLocaleID(out pdwLcid: TLCID): HResult; stdcall;
begin
  pdwLcid := FLcid;
  Result := S_OK;
end;

function sOPCDataAccess.QueryAvailableLocaleIDs(out pdwCount: UINT;
  out pdwLcid: PLCIDARRAY): HResult; stdcall;
begin
  Result := S_FALSE;
end;

function sOPCDataAccess.GetErrorString(dwError: HResult; out ppString: POleStr): HResult; stdcall;
begin
  ppString := StringToLPOLESTR('Unknown Data Access error code: ' + IntToStr(dwError));
  Result := S_OK;
end;

function sOPCDataAccess.SetClientName(szName: POleStr): HResult; stdcall;
begin
  if (addr(szName) = nil) then begin
    Result := E_INVALIDARG;
    exit;
  end;
  FClientName := szName;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
最新日韩av在线| 国产乱人伦偷精品视频不卡| 奇米色一区二区三区四区| 国产毛片精品视频| 欧美午夜影院一区| 成人欧美一区二区三区在线播放| 老司机免费视频一区二区三区| 91在线看国产| 欧美激情一区二区在线| 视频一区视频二区在线观看| www.色综合.com| 久久久国产综合精品女国产盗摄| 亚洲成人精品在线观看| 不卡av免费在线观看| 久久你懂得1024| 久久爱另类一区二区小说| 精品视频一区三区九区| 亚洲欧美自拍偷拍色图| 国产精品白丝jk黑袜喷水| 欧美日韩一级视频| 亚洲一区视频在线| 在线观看91精品国产入口| 中文字幕日本乱码精品影院| 国产91精品在线观看| 日韩女优av电影在线观看| 日韩高清一区二区| 欧美久久久一区| 亚洲国产日韩a在线播放| 91久久国产最好的精华液| 亚洲国产精品成人综合色在线婷婷| 精品写真视频在线观看| 精品少妇一区二区| 韩国女主播成人在线观看| 精品嫩草影院久久| 国产一区日韩二区欧美三区| 久久综合九色综合97婷婷| 麻豆一区二区三| 久久久久久夜精品精品免费| 国产精品99久久久久久久女警| 国产亚洲欧美日韩日本| 国产精品一二一区| 国产精品麻豆视频| 色婷婷国产精品久久包臀 | 久久综合色播五月| 国产乱理伦片在线观看夜一区| 久久免费精品国产久精品久久久久| 国产一区二区三区在线观看免费| 久久久亚洲综合| a级精品国产片在线观看| 国产精品盗摄一区二区三区| 色综合亚洲欧洲| 午夜精品久久久久久久久久久| 91精品国产免费| 国产成人亚洲综合a∨猫咪| 久久久久国产成人精品亚洲午夜| 不卡影院免费观看| 亚洲电影一级片| 久久久久久久久97黄色工厂| 99re这里只有精品6| 午夜精品久久久久久不卡8050| 精品美女被调教视频大全网站| 国产成人亚洲综合a∨猫咪| 1024成人网| 91精品国产欧美日韩| 国产精品一二三| 午夜天堂影视香蕉久久| 久久先锋影音av鲁色资源网| 色综合天天综合| 久久成人综合网| 亚洲乱码中文字幕综合| 日韩美一区二区三区| 94-欧美-setu| 日本91福利区| 亚洲女爱视频在线| 精品日韩欧美在线| 一本色道综合亚洲| 国产真实精品久久二三区| 一区二区三区成人| 国产欧美一区二区三区鸳鸯浴| 欧美专区日韩专区| 国产一区二区三区在线观看精品| 亚洲美女视频在线| 国产亚洲欧美日韩俺去了| 精品视频在线免费| 91热门视频在线观看| 韩国成人福利片在线播放| 亚洲一区欧美一区| 国产精品国产三级国产专播品爱网| 91麻豆精品国产91久久久| 91麻豆视频网站| 国产jizzjizz一区二区| 免费看欧美美女黄的网站| 亚洲一区在线观看免费观看电影高清 | 青青草成人在线观看| 亚洲黄一区二区三区| 国产精品免费丝袜| 久久综合五月天婷婷伊人| 日韩一区二区不卡| 欧美日韩三级一区二区| 在线亚洲高清视频| 91女神在线视频| 91在线观看高清| 成人av免费在线| 成人精品小蝌蚪| 国产精品99久久久久| 国产美女在线观看一区| 久草热8精品视频在线观看| 日本特黄久久久高潮| 三级亚洲高清视频| 水野朝阳av一区二区三区| 亚洲精品国产成人久久av盗摄| 亚洲欧洲国产专区| 亚洲欧美国产高清| 136国产福利精品导航| 中文字幕色av一区二区三区| 国产精品情趣视频| 中文字幕一区二区三区av| 自拍偷拍亚洲综合| 亚洲天堂久久久久久久| 亚洲色图欧美激情| 亚洲卡通欧美制服中文| 亚洲综合在线五月| 亚洲第一激情av| 亚洲电影一级黄| 日韩黄色小视频| 美女视频黄免费的久久 | 午夜激情综合网| 婷婷六月综合亚洲| 老司机一区二区| 国产在线视视频有精品| 国产高清亚洲一区| 成人午夜精品在线| 在线亚洲人成电影网站色www| 欧美亚洲综合在线| 3d动漫精品啪啪一区二区竹菊| 日韩欧美中文字幕一区| 精品国产在天天线2019| 久久一夜天堂av一区二区三区| 中文成人av在线| 亚洲国产精品一区二区久久 | 国产精品初高中害羞小美女文| |精品福利一区二区三区| 亚洲成人激情自拍| 国产在线播精品第三| 97久久超碰国产精品| 91麻豆精品国产91久久久使用方法| 日韩视频一区二区三区在线播放 | 99久久精品国产毛片| 欧美日韩亚洲国产综合| 26uuu久久综合| 亚洲欧美综合网| 久久国产精品无码网站| 北岛玲一区二区三区四区| 欧美日产国产精品| 国产日韩欧美高清| 亚洲不卡av一区二区三区| 黑人巨大精品欧美一区| 91丨九色丨国产丨porny| 日韩一二在线观看| 中文字幕视频一区| 精品在线观看视频| 欧美中文字幕久久| 国产精品素人一区二区| 天天操天天色综合| 波多野结衣一区二区三区| 91麻豆精品国产91久久久| 国产精品高潮呻吟| 久久99久久99小草精品免视看| 91亚洲国产成人精品一区二区三 | www.综合网.com| 日韩欧美成人激情| 亚洲第一福利一区| 成人午夜私人影院| 精品女同一区二区| 日韩中文字幕一区二区三区| 99在线精品观看| 久久久久久久久97黄色工厂| 日本在线观看不卡视频| 色综合久久久久综合体| 欧美国产禁国产网站cc| 国产在线精品一区二区夜色| 欧美久久久久久久久久| 亚洲码国产岛国毛片在线| 粗大黑人巨茎大战欧美成人| 精品噜噜噜噜久久久久久久久试看| 偷拍日韩校园综合在线| 欧美性做爰猛烈叫床潮| 综合久久久久久| 99久久伊人精品| 中文字幕电影一区| 国产mv日韩mv欧美| 日本一二三不卡| 国产91精品入口| 国产精品久久久久影院老司| 国产一区三区三区| 久久久蜜桃精品| 国产很黄免费观看久久| 国产婷婷色一区二区三区四区| 久久99精品国产麻豆不卡| 久久综合狠狠综合|