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

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

?? lightopc.h

?? 一個OPC服務器開發的源代碼。結構清晰
?? H
?? 第 1 頁 / 共 3 頁
字號:
   */

    void (*ldSubscribe)(const loCaller *, int count, loTagPair til[]);
                      /* Called when a client changing activity of some
   groups or tags. Listed tags are became active (when count>0) or inactive
   (when count < 0). Initially all tags are inactive. Driver may not update
   inactive tags except they are listed explicitly in argument of 
   ldReadTags(). 
   If driver does not update inactive tags there is good idea to set 
   QUALITY of these tags to LAST_KNOWN or something other than GOOD.
   This call is NOT syncronized with ldReadTags()/ldWriteTags().

   NOTE:  til[]::tpAP is NULL for this call.

 * If loDF_SUBSCRIBE_RAW has NOT been specified:
   The LightOPC maintains internal counter of activations for each tag.
   Therefore in the case of multiple [de]activations of a tag in several 
   groups by several clients only the First activation and 
   the Last deactivation will be transferred to *ldSubscribe().
   I.e. the *ldSubscribe() shows an absolute active state for a tag.

   Driver may not count usage of every tag. In may count only total number 
   of active tag (using count argument) and stop updates when this total is 0.

   NOTE:  loCaller::ca_cli* is NULL in this case. 

 * If loDF_SUBSCRIBE_RAW has been specified: 
   Each particular [de]activation will be delivered to *ldSubscribe().
   Therfore driver should count [de]activations by itself for each tag.

   NOTE:  loCaller::ca_cli* is provided in this case.     
    */

   HRESULT (*ldBrowseAccessPath)(const loCaller *,
                                 const loWchar*, LPENUMSTRING *es);
    /* IOPCBrowseServerAddressSpace::BrowseAccessPath()
     On call *es points to enpty IEnumString that can be filled
     by loEnumStrInsert(). The driver may use it or may create
     another one and return it vith RefCount set to 1 */

    void (*ldCurrentTime)(const loCaller *, FILETIME *);
                          /* Driver's own time. This time may
    *slightly* differs from system time. */

    unsigned (*ldGetErrorString)(const loCaller *,
                                 HRESULT ecode, LCID locale,
                                 loWchar *buf, unsigned wcsize);
                          /* Driver may translate the driver-specific
    error-codes to string. The size is in characters not bytes.
    In case of buf or wcsize are 0 driver should return calculated size
    of the string. Return values: 0 if ecode is unknown;
    <number of characters in the translated string>
    not counting terminating NUL if Ok. If buffer is too short then driver
    should truncate returned string properly, but returned length have to
    be not truncated. */

   HRESULT (*ldQueryAvailableLocaleIDs)(const loCaller *,
                                        DWORD* pdwCount, LCID** pdwLcid);
    /* The direct entry from IOPCCommon::QueryAvailableLocaleIDs().
       pdwLcid must be allocated by CoTaskMemAlloc(). */
    int (*ldCheckLocale)(const loCaller *, LCID dwLcid);
    /* Test does driver accept dwLcid?
       Shuld return 0 if accepts; -1 - if not */

   /* The handlers for OPCItemProperties::
      For a defined tag all [output] parameters will contain
      preallocated values. In this case the tag contains
      valid tpTi/tpRt; the tpAP is always 0.
      The lightopc does support the 6 special properties and
      properies defined through loPropXXX().
      A driver may change these preallocated data, though it's
      possible to not define these hanlers at all.
      See also loClientChain(). */
   HRESULT (*ldQueryAvailableProperties)(const loCaller *, const loTagPair *tag,
            const LPWSTR szItemID, DWORD *pdwCount,
            DWORD **ppPropertyIDs, LPWSTR **ppDescriptions, VARTYPE **ppvtDataTypes);
   HRESULT (*ldGetItemProperties)(const loCaller *, const loTagPair *tag,
            const LPWSTR szItemID, DWORD dwCount, DWORD *pdwPropertyIDs,
            VARIANT **ppvData, HRESULT **ppErrors, LCID);
   HRESULT (*ldLookupItemIDs)(const loCaller *, const loTagPair *tag,
            const LPWSTR szItemID, DWORD dwCount, DWORD *pdwPropertyIDs,
            LPWSTR **ppszNewItemIDs, HRESULT **ppErrors);
   } loDriver;

/* the flags for loDriver::ldFlags */

#define loDF_IGNCASE     (0x80) /* ignore case for ItemId comparision */
#define loDF_IGNACCPATH  (0x40) /* ignore access path in ItemMgmt::AddItem() */
/* If this flag is not set the ldAskItemID() will be called
   if either an unknown itemID passed or non-empty access_path specified.
   If this flag is set then access_path is ignored and the ldAskItemID()
   will be called for an unknown itemIDs only */

#define loDF_NOCONV     (0x100)
   /* Do not allow conversion from Canonical to Requested type */
#define loDF_NOCOMP     (0x200)
   /* Do not perform actual comparision of current and "lastsent" values of tags
      instead timestamps will be compared. See also loTF_NOCOMP */

#define loDF_CHECKITEM (0x1000) /* cause ldAskItemID() to be called */
   /* whether the ItemID is known or not */

#define loDF_CANONAME  (0x2000)
/* Example: The ldAskItemId("level.one") returns tag named "level:1".
   If the loDF_CANONAME is specified the name of "level:1" will be
   assigned to just created OPC Item. It save some memory.
   For unnamed tags this flag ignored.
 */

#define loDF_SUBSCRIBE_RAW (0x80000)
/* Affects the loDriver::ldSubscribe().
   If specified then each change in activity of a tag in 
   different groups and by different clients will cause ldSubscribe().
   Otherwise, only global changes in activity will be monitored:
   "at least one activation" vs. "no activations".
 */

   /* 2 following flags changes the empty enumerators returned */
#define loDf_EE_SOK         (1) /* return S_OK and empty enumerator */
#define loDf_EE_NULL        (2) /* return S_FALSE and NULL enumerator */
#define loDf_EE_SFALSE      (3) /* return S_FALSE and empty enumerator (default) */

#define loDf_DWG         (0x04) /* Destroy server with all unreleased groups */
#define loDf_NOFORCE     (0x08) /* ignore FORCE flag in RemoveGroup() */

/* These 3 flags are specefic for in-proc servers only. They may
   improve the performance in case of mixed thread models or decrease in
   case of MTA clients */
#define loDf_FREEMARSH (0x10000)
   /* Provide CoCreateFreeThreadedMarshaler() for server/group objects */
#define loDf_BOTHMODEL (0x20000)
   /* Do CoMarshalInterThreadInterfaceInStream() /
         CoGetInterfaceAndReleaseStream()  for callback interfaces */
#define loDf_FREEMODEL (0x40000) /* ignored / default */

   /* The special return values for ldReadTags() */
#define loDR_CACHED     (1)
#define loDR_STORED     (2)

   /* The special return values for ldWriteTags() */
#define loDW_ALLDONE    (0)
#define loDW_TOCACHE    (1)

   /* Possible goals of a ldAskItemID() call. Additional
   constans might be returned in the future. */
#define loDAIG_MASK        (0x00f0) /* mask of a main goal code */
                                    /* no subcodes defined yet */
#define loDAIG_LOINT       (0x0000) /* LOPC internal needs  */
#define loDAIG_ADDITEM     (0x0010) /* OPCItemMgt::AddItems() */
#define loDAIG_VALIDATE    (0x0020) /* OPCItemMgt::ValidateItem() */
#define loDAIG_BROWSE      (0x0030) /* A method of OPCBrowseAddressSpace:: */
#define loDAIG_IPROPERTY   (0x0040) /* A method of OPCItemProperties:: */
#define loDAIG_IPROPQUERY  (0x0041) /* OPCItemProperties::QueryAvailableProperties() */
#define loDAIG_IPROPGET    (0x0042) /* OPCItemProperties::GetItemProperties() */
#define loDAIG_IPROPLOOKUP (0x0043) /* OPCItemProperties::LookupItemID() */
#define loDAIG_IPROPRQUERY (0x0045) /* Query VarType of a tag referenced as property */
#define loDAIG_IPROPRGET   (0x0046) /* Readig value of a tag referenced as property */


typedef struct loVendorInfo
	{
	 WORD lviMajor, lviMinor, lviBuild, lviReserv;
	 char *lviInfo;
	} loVendorInfo;

/* In most functions returned int is 0 if OK or an errno const on error
   or -1 if no appropriate errno const match */

LO_PUBLIC
int loServiceCreate(loService **result, const loDriver *, unsigned tagcount);
/* The First initialization step (after initing a logging facility :-)
   tagcount - is upper limit of nubmer of allocatable tags.
   The tagcount is limited only by amount of available memory.
   Each tag consumes from (about) 150 (loAddRealTag_b*()) 
   to 250 (other loAddRealTag*()) bytes */
LO_PUBLIC
int loServiceDestroy(loService *se); /* service actually will not be destroyed
   upon all connected client releases it. This call is NOT thread safe - no
   other calls to se should be issued simultaneously */

LO_PUBLIC
int loClientCreate(loService *se, loClient **cli,
                   int ldFlags, /* per-client loDf_XXX flags */
                   const loVendorInfo *vi,
                   void (*release_handle)(void *, loService *, loClient *),
                   void *release_handle_arg);
/* create new client connection and attach it to the service. Returned pointer
   *cli can be casted to IUnknown* and represents IOPCServer object with all
   related interfaces with "ReferenceCount" = 1. Driver have to Release it after
   use or passing to a client. vi and other arguments are optional.
   release_handle will be called after last Release() */
LO_PUBLIC
int loClientCreate_agg(loService *se, loClient **cli, 
                   IUnknown *outer, IUnknown **inner,
                   int ldFlags,
                   const loVendorInfo *vi,
                   void (*release_handle)(void *, loService *, loClient *),
                   void *release_handle_arg);
/* create an aggregated server object.
   The <outer> should point to containing/outer object (see QI::CreateInstance).
   In the *<inner> the created interface pointer will be returned.
   NOTE: use *cli to identify the created client, but use
   (*inner)->Release() to destroy it, because call (*cli)->Release() will be
   delegated to <outer>.
*/

LO_PUBLIC
int loClientChain(loClient *cli,
                  HRESULT (*qi_chain)(void *rha, loService *, loClient *,
                                      const IID *, LPVOID *),
                   void (*release_handle)(void *rha, loService *, loClient *),
                   void *release_handle_arg);
/* Set the qi_chain QueryInterface() wrapper for the server instance cli.
   The release handler is changed too. This function is not thread-safe
   and may not be used after the interface is passed to client.
   A chained object (usally <<rha>>) should delegate AddRef() and Release()
   to cli->AddRef/Release.
   qi_chain() will be called from inside cli->QueryInterface()
   for all server's interfaces before a native interface pointer obtained.
   This function is designed for transparent IPersistFile/IOPCSecurity/
   IOPCItemProperties implementations.
   Returns: 0 / EBADF.
*/

#define loAM_RDWR          (1)  /* read-write allowed (default) */
#define loAM_RDONLY_OP     (2)  /* disable write operations */
#define loAM_RDONLY_ADD    (4)  /* report all tags as read-only for Add/Validate/EnumIetmAttr */
#define loAM_RDONLY_BROWSE (8)  /* report all tags as read-only for Browse */
#define loAM_NOREAD_DEV (0x10)  /* perform cache read instead of device read */
#define loAM_ERREAD_DEV (0x20)  /* error on device read */

LO_PUBLIC
int loClientAccessMode(loService *, loClient *, int accmode);
/* Set the access mode for specified client instance. accmode is loAM_RDWR or
   any combination of other loAM_XXXX flags.
*/


LO_PUBLIC
void *loClientArg(loClient *); /* Returns release_handle_arg of the server */
LO_PUBLIC
void *loDriverArg(loService *); /* Returns loDriver::ldDriverArg of the service */
#define loDriverArg(se) (*((void**)se))

LO_PUBLIC
int loAddRealTag(loService *, /* actual service context */
                 loTagId       *ti, /* returned TagId */
                 loRealTag      rt, /* != 0 */
                 const char    *tName,
                 int            tFlag, /* loTF_XXX */
                 unsigned       tRight, /* OPC_READABLE|OPC_WRITEABLE */
                 VARIANT       *tValue,  /* Canonical VARTYPE & default valid value */
                 /*OPCEUTYPE*/int tEUtype,
                 VARIANT *tEUinfo); /* optional, if tdEUtype is 0*/
    /* Create a tag. tdName = 0 is valid but such tag can be accessed only using
      loTagId returned by loDriver::ldAskItemID() in loTagId *ti. Thus
      that function have to be provided and must to return *ti.
      if tdValue = 0 or has VT_EMPTY type the created tag will be visible by client
      through IOPCBrowseAddressSpace interface only. This tag must have defined
      tdName as "hint string" to describe valid itemIDs. Actual tags have to be
      unnamed and will be accessed through GetItemID()/ldAskItemId().

      The loRealTag rt will not be used by LightOPC. It rather be passed back to
      some driver's callbacks via loTagPair. It's possible to define th loRealTag_
      in any manner. */
/* To make tags' creation / searching faster you may do following 
   (independent) things:
   a) use nameless tags and "hint strings";
   b) create all named tags first, then unnamed ones;
   c) use loDF_CHECKITEM and implement a fast search in ldAskItemID(). */

#define loTF_NOCOMP  (loDF_NOCOMP)
                   /* don't compare item's values on refresh
                      item is treated as changed if timestamp mismatch */
#define loTF_NOCONV  (loDF_NOCONV)
                   /* disable conversion from Canonical to Requested type */
#define loTF_EMPTY   (0x400)
                   /* make the tag invisible for AddItem()/ValidateItem()
  It's the same as empty tdValue except the 6 properties are provided for
  tags with non-empty tdValue only */
#define loTF_CONVERT (0x800)
  /* force custom conversion for VT_BSTR/VT_DATE/VT_ARRAY|*  */

#define loTF_CHECKITEM (loDF_CHECKITEM) /* cause ldAskItemID() to be called */
   /* for this tag whether the ItemID is known or not */

#define loTF_CANONAME  (loDF_CANONAME)

#define loTF_NOBROWSE  (0x4000) /* make the tag invisible for BrowseAddressSpace */


LO_PUBLIC
int loAddRealTag_a(loService *, /* actual service context */
                   loTagId       *ti, /* returned TagId */
                   loRealTag      rt,
                   const char    *tName,
                   int            tFlag, /* loTF_XXX */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品1区2区在线观看| 亚洲午夜日本在线观看| 亚洲欧美日韩人成在线播放| 六月丁香婷婷色狠狠久久| 91最新地址在线播放| www激情久久| 蜜臀久久久久久久| 欧美日韩在线播放三区四区| 亚洲欧美综合色| 国产aⅴ精品一区二区三区色成熟| 欧美日韩在线精品一区二区三区激情| 国产精品美女久久久久久| 另类小说一区二区三区| 欧美精品第1页| 亚洲一区二区三区四区五区中文| av在线不卡网| 国产精品福利一区| 成人黄色小视频| 久久精品欧美一区二区三区不卡| 久久er精品视频| 日韩一级大片在线| 偷拍亚洲欧洲综合| 欧美日韩国产综合久久| 亚洲第一激情av| 欧美日韩国产高清一区二区 | 男男视频亚洲欧美| 欧美日本一道本在线视频| 一区二区三区不卡在线观看| 日本久久一区二区| 夜夜嗨av一区二区三区网页| 欧美在线观看视频在线| 午夜欧美大尺度福利影院在线看 | 久久无码av三级| 国产盗摄精品一区二区三区在线| 亚洲精品一区在线观看| 国产乱人伦精品一区二区在线观看 | 成人国产精品免费观看| 国产拍揄自揄精品视频麻豆| 成人性生交大片免费 | 精品剧情v国产在线观看在线| 日本中文字幕一区二区有限公司| 制服丝袜国产精品| 久久国产夜色精品鲁鲁99| 久久亚洲捆绑美女| youjizz国产精品| 亚洲图片欧美综合| 日韩精品一区二区三区视频播放| 国产一区二区伦理片| 中文字幕乱码亚洲精品一区 | 福利91精品一区二区三区| 欧美激情中文字幕| 色婷婷av一区二区三区软件| 婷婷丁香激情综合| 久久人人爽爽爽人久久久| 成人国产免费视频| 亚洲午夜激情网站| 久久久不卡网国产精品二区| 丁香六月久久综合狠狠色| 一区二区三区不卡视频在线观看| 欧美一二三四在线| 成人一区二区三区在线观看| 一区二区三区高清在线| 日韩精品一区二区三区老鸭窝| 成人性生交大片免费看中文 | 国产不卡在线播放| 亚洲制服欧美中文字幕中文字幕| 精品少妇一区二区三区在线播放 | 91福利视频久久久久| 久热成人在线视频| 中文字幕亚洲欧美在线不卡| 制服丝袜激情欧洲亚洲| 91免费版在线看| 国产一区二区调教| 无码av免费一区二区三区试看| 中文字幕精品—区二区四季| 91精品啪在线观看国产60岁| 99视频在线观看一区三区| 奇米一区二区三区| 一区二区在线观看视频| 久久这里只有精品6| 欧美日韩成人综合在线一区二区| 成人福利在线看| 狠狠久久亚洲欧美| 日韩不卡在线观看日韩不卡视频| 中文字幕欧美一| 久久久久久久久久久黄色 | 一本一道久久a久久精品 | 国产一区二区在线视频| 首页亚洲欧美制服丝腿| 亚洲欧美一区二区三区久本道91| 精品国产免费人成电影在线观看四季| 欧美性一二三区| 91丨九色丨蝌蚪富婆spa| 成人妖精视频yjsp地址| 国产中文字幕精品| 麻豆国产精品777777在线| 亚洲一区二区三区四区五区中文| 亚洲人成精品久久久久| 欧美激情在线看| 久久伊人中文字幕| 亚洲精品在线电影| 久久久久久久久久久电影| 日韩欧美一区二区三区在线| 制服丝袜亚洲色图| 欧美精品久久99久久在免费线| 欧美在线观看一二区| 欧美私模裸体表演在线观看| 色网综合在线观看| 一本色道久久综合狠狠躁的推荐 | 99久免费精品视频在线观看| 国产一区视频网站| 国产精品亚洲综合一区在线观看| 看片的网站亚洲| 精品一区二区三区免费观看| 狠狠色狠狠色综合日日91app| 久久99精品久久只有精品| 蜜臂av日日欢夜夜爽一区| 久久99这里只有精品| 韩国av一区二区| 国产成人av自拍| eeuss国产一区二区三区| 91小视频免费观看| 精品婷婷伊人一区三区三| 666欧美在线视频| 欧美一区二区久久| www国产成人| 1区2区3区国产精品| 亚洲男帅同性gay1069| 午夜精品福利一区二区三区av| 婷婷丁香激情综合| 国产在线观看免费一区| 成人国产精品免费观看视频| 在线观看国产一区二区| 欧美一激情一区二区三区| 久久精品夜夜夜夜久久| 国产精品对白交换视频| 亚洲一区二区三区四区的 | 国产日韩一级二级三级| 亚洲精品视频观看| 三级亚洲高清视频| 韩国午夜理伦三级不卡影院| www.成人在线| 91精品国产综合久久国产大片| 精品日韩一区二区| 亚洲视频精选在线| 欧美aaaaa成人免费观看视频| 国产成人综合精品三级| 色偷偷88欧美精品久久久| 91精品久久久久久久久99蜜臂| 亚洲色大成网站www久久九九| 亚洲一区二区欧美激情| 激情久久五月天| 欧洲视频一区二区| 26uuu成人网一区二区三区| 亚洲三级理论片| 久久精品国产第一区二区三区| 夫妻av一区二区| 日韩视频不卡中文| 亚洲日本青草视频在线怡红院| 日韩精品一卡二卡三卡四卡无卡| 国产成人啪免费观看软件| 欧美日韩不卡在线| 国产精品久久影院| 奇米精品一区二区三区在线观看一 | 在线观看国产91| 中文字幕欧美日韩一区| 日本vs亚洲vs韩国一区三区二区| 色综合久久66| 欧美国产日韩精品免费观看| 美女在线一区二区| 精品污污网站免费看| 亚洲图片激情小说| 国产一区二区三区在线观看精品| 欧美老肥妇做.爰bbww视频| 中文字幕一区二区日韩精品绯色| 精品一区二区三区日韩| 欧美一级电影网站| 午夜精品久久久久久久99樱桃| caoporn国产一区二区| 国产日韩欧美精品综合| 精品综合久久久久久8888| 欧美一区二区三区的| 香蕉久久一区二区不卡无毒影院 | 成人av资源下载| 久久精品一区蜜桃臀影院| 麻豆精品在线看| 日韩视频免费观看高清在线视频| 亚洲一区二区三区四区在线 | 亚洲成av人片| 色诱亚洲精品久久久久久| 中文字幕视频一区| 成人精品视频一区| 国产色产综合产在线视频| 另类小说图片综合网| 欧美成人在线直播| 美女尤物国产一区| 精品剧情v国产在线观看在线| 精品一区二区三区免费观看| 精品国产网站在线观看| 久久国产福利国产秒拍|