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

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

?? itemprop.cpp

?? 一個OPC服務器開發的源代碼。結構清晰
?? CPP
字號:
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2001  Timofei Bondarenko                               *
                                                                          *
 ItemProperties support
 **************************************************************************/

#include "privopc.h"
#include "proplist.h"
#include <opcerror.h>

/***************************/

static HRESULT lo_basic_props(int *lockst, loClient *cli, loTagEntry *te, DWORD propid, VARIANT *var)
{
 HRESULT hr = S_OK;

 if (VT_EMPTY != V_VT(var)) VariantClear(var);
 if (VT_EMPTY == taVTYPE(&te->attr)) return OPC_E_INVALID_PID;

 switch(propid)
   {
 case 1: /* "Item Canonical DataType" */
    V_I2(var) = taVTYPE(&te->attr);
    V_VT(var) = VT_I2;
    break;

 case 5: /* "Item Access Rights" */
   V_I4(var) = te->attr.taRights &
              ((cli->access_mode & loAM_RDONLY_BROWSE)? (loOPC_RIGHTS & ~OPC_WRITEABLE)
                                                      :  loOPC_RIGHTS);
   V_VT(var) = VT_I4;
   break;

 case 6: /* "Server Scan Rate" */
   V_R4(var) = (float)cli->se->driver.ldRefreshRate_min;
   V_VT(var) = VT_R4;
   break;

 case 7: /* "Item EU Type" */
   V_I4(var) = te->attr.taDetail->tdEUtype;
   V_VT(var) = VT_I4;V_I4(var) = 2;
   break;

 case 8: /* "Item EU Info" */
   if ((te->attr.taFlags & loTF_CONVERT) &&
        te->attr.taDetail->tdEUtype == OPC_ENUMERATED)
      hr = lo_conv_enum(&cli->ctxt, var, &te->attr, NULL);
   else hr = VariantCopy(var, &te->attr.taDetail->tdEUinfo);
   break;

 case 2: /* "Item Value" */
 case 3: /* "Item Quality" */
 case 4: /* "Item Timestamp" */

   if (!lockst) lw_rw_rdlock(&cli->se->lkPrim);
   else if (!*lockst) *lockst = 1, lw_rw_rdlock(&cli->se->lkPrim);
 switch(propid)
   {
 case 2: /* "Item Value" */
    hr = (te->attr.taRights & OPC_READABLE)? VariantCopy(var, &te->primValue)
                                           : OPC_E_BADRIGHTS;
    break;

 case 3: /* "Item Quality" */
    V_I2(var) = (WORD)te->prim.tsQuality;
    V_VT(var) = VT_I2;
    break;

 case 4: /* "Item Timestamp" */
    V_DATE(var) = lo_filetime_to_variant(&te->prim.tsTime);
    V_VT(var) = VT_DATE;
    /* Anyway more accurate than SystemTimeToVariantTime(); */
    break;
   }
   if (!lockst) lw_rw_unlock(&cli->se->lkPrim);
   break;

 default:
    hr = OPC_E_INVALID_PID;
   }
 return hr;
}


/*************************************************************************/

STDMETHODIMP LightOPCServer::GetItemProperties(
            /* [in] */ LPWSTR szItemID,
            /* [in] */ DWORD dwCount,
            /* [size_is][in] */ DWORD *pdwPropertyIDs,
            /* [size_is][size_is][out] */ VARIANT **ppvData,
            /* [size_is][size_is][out] */ HRESULT **ppErrors)
{
 HRESULT hr = S_OK;
 HRESULT *errs = 0;
 VARIANT *vdata = 0;
 loTagPair tgp;

 LO_CHECK_STATEz2("GetItemProperties", ppvData, ppErrors);

 if (!szItemID || !dwCount || !pdwPropertyIDs || !ppvData || !ppErrors)
   { hr = E_INVALIDARG; goto Return; }

 if (!(errs = (HRESULT*)loComAlloc(sizeof(HRESULT) * dwCount)) ||
     !(vdata = (VARIANT*)loComAlloc(sizeof(VARIANT) * dwCount)))
   { hr = E_OUTOFMEMORY; goto Return; }
 loVariant_init(vdata, dwCount);
// memset(errs, 0, sizeof(HRESULT) * dwCount);
 memset(&tgp, 0, sizeof(tgp));

 lw_rw_rdlock(&se->lkMgmt);
 if (tgp.tpTi = loFindItemID(se, &ctxt.cactx, 1, szItemID, 0,
                       VT_EMPTY, loDAIG_IPROPGET, 0, &hr))
   {
    unsigned ii;
    int unlk = 0;
    loTagEntry *te = &se->tags[tgp.tpTi];
    loRelName rn;
    rn.se = se;
    rn.cactx = &ctxt.cactx;
    rn.locked = 1;
    loStringBuf_init(&rn.sb);
    loBaseName_init(&rn.bn, &te->attr, se->branch_sep);

//    tgp.tpTi = ti;
    tgp.tpRt = te->attr.taRt;

    for(ii = 0; ii < dwCount; ii++)
      {
       HRESULT lhr = OPC_E_INVALID_PID;
       unsigned pli;

       for(pli = 0; pli < loPROPLIST_MAX; pli++)
         {
          loProperty **prr;
          if (prr = lo_prop_find(&se->proplist[te->attr.taPropList[pli]],
                                 pdwPropertyIDs[ii]))
            {
             loProperty *pr = *prr;

             if (VT_EMPTY != V_VT(&pr->prValue))
               {
                lhr = VariantCopy(&vdata[ii], &pr->prValue);
               }
             else if (pr->prPath && *pr->prPath)
               {
                loTagId tti = lo_relative_tag(&rn, pr->prPath, loDAIG_IPROPRGET);
                lhr = rn.err;
                if (tti)
                  {
                   if (!unlk) { unlk = 1; lw_rw_rdlock(&se->lkPrim); }
#if 0
                   if (!(se->tags[tti].attr.taRights & OPC_READABLE)) lhr = OPC_E_BADRIGHTS;
                   else
#endif
                     lhr = VariantCopy(&vdata[ii], &se->tags[tti].primValue);
                  }
                else if (E_OUTOFMEMORY != lhr) lhr = E_FAIL;
               }
             else lhr = OPC_E_INVALID_PID;
             goto Cont;
            }
         }/* end of for(pli...) */
       lhr = lo_basic_props(&unlk, this, te, pdwPropertyIDs[ii], &vdata[ii]);
Cont:
       if (S_OK != (errs[ii] = lhr)) hr = S_FALSE;
      }  /* end of for(...dwCount) */
    if (unlk) lw_rw_unlock(&se->lkPrim);
    loStringBuf_clear(&rn.sb);
   }
 lw_rw_unlock(&se->lkMgmt);

 if (se->driver.ldGetItemProperties && ( SUCCEEDED(hr) 
     || OPC_E_UNKNOWNITEMID == hr
     || OPC_E_INVALIDITEMID == hr) )
   {
    LCID locale = 0;
    GetLocaleID(&locale);
    hr = se->driver.ldGetItemProperties(&ctxt.cactx, &tgp,
            szItemID, dwCount, pdwPropertyIDs, &vdata, &errs, locale);
   }

Return:
 if (FAILED(hr))
   {
    if (errs)
      { loComFree(errs); errs = 0; }
    if (vdata)
      {
       loVariant_clear(vdata, dwCount);
       loComFree(vdata); vdata = 0;
      }
    UL_INFO((LOG_SR("GetItemProperties(%ls, %u) = %s"),
               loWnul(szItemID), dwCount, loStrError(hr)));
   }
 else
   {
    *ppErrors = errs, errs = 0;
    *ppvData = vdata, vdata = 0;
    UL_NOTICE((LOG_SR("GetItemProperties(%ls, %u) ti:%u = Ok"),
              loWnul(szItemID), dwCount, tgp.tpTi));
   }

 LO_FINISH();
 return hr;
}

/***********************************************************************************/

STDMETHODIMP LightOPCServer::LookupItemIDs(
            /* [in] */ LPWSTR szItemID,
            /* [in] */ DWORD dwCount,
            /* [size_is][in] */ DWORD *pdwPropertyIDs,
            /* [size_is][size_is][string][out] */ LPWSTR **ppszNewItemIDs,
            /* [size_is][size_is][out] */ HRESULT **ppErrors)
{
 HRESULT hr = S_OK;
 HRESULT *errs = 0;
 LPWSTR *itemids = 0;
 loTagPair tgp;

 LO_CHECK_STATEz2("LookupItemIDs", ppszNewItemIDs, ppErrors);

 if (!szItemID || !dwCount || !pdwPropertyIDs || !ppszNewItemIDs || !ppErrors)
   { hr = E_INVALIDARG; goto Return; }

 if (!(errs = (HRESULT*)loComAlloc(sizeof(HRESULT) * dwCount)) ||
     !(itemids = (LPWSTR*)loComAlloc(sizeof(LPWSTR) * dwCount)))
   { hr = E_OUTOFMEMORY; goto Return; }
 memset(itemids, 0, sizeof(HRESULT) * dwCount);
// memset(errs, 0, sizeof(HRESULT) * dwCount);
 memset(&tgp, 0, sizeof(tgp));

 lw_rw_rdlock(&se->lkMgmt);
 if (tgp.tpTi = loFindItemID(se, &ctxt.cactx, 1, szItemID, 0,
                       VT_EMPTY, loDAIG_IPROPLOOKUP, 0, &hr))
   {
    unsigned ii;
    loTagAttrib *ta = &se->tags[tgp.tpTi].attr;
    loBaseName base;
    loStringBuf sb;
    loStringBuf_init(&sb);
    loBaseName_init(&base, ta, se->branch_sep);

    tgp.tpRt = ta->taRt;

    for(ii = 0; ii < dwCount; ii++)
      {
       const loWchar *itid = L""; /* no NULL pointers */
       HRESULT lhr = OPC_E_INVALID_PID;
       unsigned pli;

       for(pli = 0; pli < loPROPLIST_MAX; pli++)
         {
          loProperty **prr;
          if (prr = lo_prop_find(&se->proplist[ta->taPropList[pli]],
                                 pdwPropertyIDs[ii]))
            {
             loProperty *pr = *prr;
             if (!pr->prPath || !*pr->prPath)
               {
                hr = S_FALSE;
                lhr = VT_EMPTY == V_VT(&pr->prValue)? OPC_E_INVALID_PID: E_FAIL;
                                 /* A disabled property / No ItemID defined */
               }
             else
               {
                itid = lo_relative_name(&sb, &base, pr->prPath);
                lhr = S_OK;
               }
             goto Cont;
            }
         }
      hr = S_FALSE;
#if 0
      /* What's exactly required by the standard? */
      if (pdwPropertyIDs[ii] >= 1 && pdwPropertyIDs[ii] <= 6 &&
          VT_EMPTY != taVTYPE(&te->attr)) lhr = E_FAIL;
#endif

Cont:
      errs[ii] = lhr;
      if (!itid || !(itemids[ii] = loComWstrdup(itid)))
        {
         hr = E_OUTOFMEMORY;
         break;
        }
     } /* end of for(pli...) */
   loStringBuf_clear(&sb);
  }

 lw_rw_unlock(&se->lkMgmt);

 if (se->driver.ldLookupItemIDs && (SUCCEEDED(hr) 
     || OPC_E_UNKNOWNITEMID == hr
     || OPC_E_INVALIDITEMID == hr) )
   hr = se->driver.ldLookupItemIDs(&ctxt.cactx, &tgp,
            szItemID, dwCount, pdwPropertyIDs, &itemids, &errs);

Return:
 if (FAILED(hr))
   {
    if (errs) loComFree(errs), errs = 0;
    if (itemids) loComFree_LPWSTR(itemids, dwCount), itemids = 0;

    UL_INFO((LOG_SR("LookupItemIDs(%ls, %u) = %s"),
               loWnul(szItemID), dwCount, loStrError(hr)));
   }
 else
   {
    if (ppErrors) *ppErrors = errs, errs = 0;
    else loComFree(errs);
    *ppszNewItemIDs = itemids, itemids = 0;

    UL_NOTICE((LOG_SR("LookupItemIDs(%ls, %u) ti:%u = Ok"),
      loWnul(szItemID), dwCount, tgp.tpTi));
   }

 LO_FINISH();
 return hr;
}

/* end of itemprop.cpp */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97久久精品人人做人人爽| 精品亚洲成a人| 91在线观看污| 亚洲欧美日韩中文字幕一区二区三区| 成人精品视频一区二区三区 | 在线亚洲欧美专区二区| 亚洲人妖av一区二区| 在线亚洲欧美专区二区| 午夜视频一区二区三区| 日韩欧美视频在线| 国产精品资源网站| 成人欧美一区二区三区| 欧美日韩你懂得| 美女视频第一区二区三区免费观看网站| 精品久久久久99| 91性感美女视频| 日韩不卡一区二区三区| 国产午夜一区二区三区| 色94色欧美sute亚洲线路一ni| 五月天国产精品| 精品电影一区二区| 99精品视频一区二区三区| 日韩**一区毛片| 中文字幕免费一区| 色欲综合视频天天天| 日本成人在线看| 国产精品久线观看视频| 欧美伦理影视网| 国产成人精品综合在线观看| 亚洲夂夂婷婷色拍ww47| 久久久久国产精品麻豆ai换脸| 91老师片黄在线观看| 美女爽到高潮91| 亚洲免费观看视频| 国产亚洲视频系列| 欧美日韩国产成人在线91| 成人小视频在线| 日本特黄久久久高潮| 综合激情网...| 2021国产精品久久精品| 欧洲一区在线观看| 成人黄色小视频| 欧美aⅴ一区二区三区视频| 亚洲人成影院在线观看| 精品国产一区二区三区四区四| 色婷婷亚洲综合| 国产91丝袜在线播放九色| 午夜欧美大尺度福利影院在线看| 亚洲国产成人在线| 欧美草草影院在线视频| 欧美日韩国产片| 91国在线观看| 不卡一区在线观看| 国产盗摄女厕一区二区三区| 蜜桃av一区二区| 亚洲国产成人精品视频| 亚洲激情av在线| 亚洲人精品午夜| 国产精品色哟哟| 亚洲精品在线观看视频| 91精品国产色综合久久不卡蜜臀| 色综合一个色综合| 99久久婷婷国产精品综合| 国产精品88av| 黑人巨大精品欧美黑白配亚洲| 亚洲国产精品一区二区久久| 亚洲精品国产一区二区三区四区在线| 欧美极品xxx| 久久久久久久久久久电影| 欧美成人一区二区三区在线观看 | 国产精品蜜臀在线观看| 久久久99精品久久| 欧美精品一区二区三区视频| 日韩欧美综合一区| 91精品国产色综合久久久蜜香臀| 欧美久久久影院| 欧美人成免费网站| 欧美人xxxx| 91麻豆精品国产91久久久久久久久 | 日韩精品一二三| 日韩av在线发布| 精品一区二区三区久久| 久久99国产精品免费网站| 老司机精品视频在线| 精品无人码麻豆乱码1区2区| 精品一区二区av| 国产精品99久久久久久有的能看 | 丁香啪啪综合成人亚洲小说| 国产91对白在线观看九色| 成人免费电影视频| 91色乱码一区二区三区| 91豆麻精品91久久久久久| 欧美日韩国产高清一区| 欧美成人女星排名| 欧美国产国产综合| 一区二区免费在线| 五月婷婷色综合| 久久99国内精品| 成人激情午夜影院| 欧美性猛交xxxx黑人交| 欧美一区二区三区视频免费| 亚洲精品一区二区三区影院| 中文字幕色av一区二区三区| 一区二区三区加勒比av| 蜜臀a∨国产成人精品| 国产又黄又大久久| 91免费在线看| 日韩欧美一级二级三级久久久| 亚洲精品一区二区三区香蕉| 中文字幕亚洲区| 日韩**一区毛片| 成人免费毛片app| 3751色影院一区二区三区| 国产亚洲精品免费| 亚洲一区二区中文在线| 精品一二三四区| 一本色道**综合亚洲精品蜜桃冫| 日韩精品一区在线观看| ...中文天堂在线一区| 日本美女一区二区三区视频| 国产成人综合在线观看| 欧美日韩免费电影| 欧美激情在线观看视频免费| 亚洲大片免费看| 国产精选一区二区三区| 欧美色图在线观看| 国产免费成人在线视频| 婷婷久久综合九色综合伊人色| 国产一区二区三区蝌蚪| 欧美制服丝袜第一页| 久久免费视频色| 天天操天天干天天综合网| 成人美女在线观看| 精品乱人伦小说| 午夜伦欧美伦电影理论片| 成熟亚洲日本毛茸茸凸凹| 日韩三级中文字幕| 亚洲精品网站在线观看| 国产成人精品综合在线观看| 欧美一区在线视频| 夜色激情一区二区| 成人精品视频一区| 精品久久国产老人久久综合| 亚洲高清免费视频| 色伊人久久综合中文字幕| 国产亚洲人成网站| 久久99久久久久久久久久久| 欧美性受极品xxxx喷水| 亚洲日穴在线视频| 成人小视频免费在线观看| 欧美刺激午夜性久久久久久久| 亚洲成人综合视频| 在线观看视频一区二区欧美日韩 | 樱花草国产18久久久久| 高清不卡在线观看av| 日韩免费福利电影在线观看| 日韩影院免费视频| 欧美精品xxxxbbbb| 亚洲国产一区二区三区青草影视| 91免费看片在线观看| 亚洲欧洲精品一区二区三区 | 国产真实乱对白精彩久久| 日韩亚洲欧美在线观看| 全部av―极品视觉盛宴亚洲| 欧美日韩国产综合草草| 激情五月激情综合网| 欧美一区日本一区韩国一区| 男女男精品视频网| 91精品国产日韩91久久久久久| 日韩av一二三| 日韩欧美国产精品| 国产在线看一区| 中文字幕精品一区二区三区精品| 国产不卡在线视频| 亚洲国产成人一区二区三区| voyeur盗摄精品| 国产精品国产三级国产普通话99 | 日韩久久免费av| 韩国精品在线观看| 国产性色一区二区| 99久久国产免费看| 夜夜嗨av一区二区三区网页| 欧美日韩一区中文字幕| 日韩不卡免费视频| 欧美xxxxxxxxx| 国产盗摄女厕一区二区三区| 最近日韩中文字幕| 欧美性受xxxx黑人xyx| 免费的国产精品| 国产午夜精品一区二区| 成人网页在线观看| 一区二区三区免费| 日韩欧美一二三区| 丰满亚洲少妇av| 亚洲欧美乱综合| 欧美一区二区免费观在线| 国产东北露脸精品视频| 洋洋av久久久久久久一区| 欧美一区二区在线视频| 成人自拍视频在线|