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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? iowrite.cpp

?? 一個(gè)OPC服務(wù)器開發(fā)的源代碼。結(jié)構(gòu)清晰
?? CPP
字號(hào):
/**************************************************************************
 *                                                                        *
 * Light OPC Server development library                                   *
 *                                                                        *
 *   Copyright (c) 2000  Timofei Bondarenko                               *
                                                                          *
 LightOPCGroup::IOPC[A]SyncIO::Write() methods
 **************************************************************************/

#include <opcerror.h>
#include "privopc.h"
#include LO_OLE_ERRORS_h /*CONNECT_E_NOCONNECTION*/

/* IOPCSyncIO:: */

STDMETHODIMP LightOPCGroup::Write(DWORD dwCount,
                                  OPCHANDLE  *phServer,
                                  VARIANT *pItemValues,
                                  HRESULT **ppErrors)
{
 HRESULT hr = S_OK;
 HRESULT *err = 0;
 unsigned items_ok = 0;
 loRequest *rq;

 LO_CHECK_STATEz1("SyncIO:Write", ppErrors);
 UL_TRACE((LOG_GRH("SyncIO:Write(%u)..."), dwCount));

 if (!phServer || !pItemValues || !dwCount)
   { hr = E_INVALIDARG; goto Return; }

 err = (HRESULT*)loComAlloc(dwCount * sizeof(HRESULT));
 rq = lo_req_alloc(dwCount, loUPL_variant /*| loUPL_errors*/ | loUPL_tagpair);
 if (!rq || !err) { hr = E_OUTOFMEMORY; goto Return; }
 rq->operation = loRQ_OP_WRITE | loRQ_SYNC | loRQ_DEVICE;
 rq->group_key = ServerHandle;
 rq->serv_key = owner->serv_key;
 rq->com_allocated = rq->upl.errors = err;
 loTagPair_init(rq->upl.tagpair, dwCount);
 rq->upl.rctx = owner->ctxt;

 lock_read();
 rq->upl.rctx.cta.vc_lcid = grLCID;

 if (owner->access_mode & loAM_RDONLY_OP)
   {
    unsigned ii;
    for(ii = 0; ii < dwCount; ii++) err[ii] = OPC_E_BADRIGHTS;
   }
 else
   {
    loService *se = owner->se;
    loTagEntry *tags = se->tags;
    loTagPair *tpl = rq->upl.tagpair;
//    HRESULT *errors = rq->upl.errors;
    VARIANT *variant = rq->upl.variant;
    LightOPCItem *it;
    unsigned ii;

    for(ii = 0; ii < dwCount; ii++, tpl++, pItemValues++)
      if (!(it = by_index(phServer[ii]))) err[ii] = OPC_E_INVALIDHANDLE;
      else
        {
         loTagEntry *te = &tags[it->tid];

#if 0 != LO_CHECK_RIGHTS
         if (!(OPC_WRITEABLE & te->attr.taRights)) err[ii] = OPC_E_BADRIGHTS;
         else
#endif
              if (VT_EMPTY == V_VT(pItemValues) ||/*) *errors = OPC_E_BADTYPE;
         else if (*/ S_OK == (err[ii] =
                       VariantCopy(&variant[ii], pItemValues)))
           {
            err[ii] = S_OK;
            tpl->tpTi = te->attr.taTi;
            tpl->tpRt = te->attr.taRt;
            tpl->tpAP = it->AcPath;
            items_ok++;
           }
         else UL_TRACE((LOG_GRH("SyncIO:Write(%u) [ %x / %x ] %s"),
               ii, V_VT(pItemValues), taVTYPE(&te->attr), loStrError(err[ii])));
       }
    rq->upl.used = dwCount;
   }
 unlock();
// rq->upl.used = dwCount;

 if (0 == items_ok)
   {
//    memcpy(err, rq->upl.errors, dwCount * sizeof(*err));
    rq->com_allocated = 0;
    lo_req_free(rq);
    hr = S_FALSE;
   }
 else
   {
    rq->upl.master_err = items_ok == dwCount? S_OK: S_FALSE;
    err = 0;
    if (rq = lo_req_put_sync(&owner->q_req, &owner->q_ret, rq))
      {
       hr = rq->upl.master_err;
//       memcpy(err, rq->upl.errors, dwCount * sizeof(*err));
       err = rq->upl.errors;
       rq->com_allocated = 0;
       lo_req_free(rq);
      }
    else hr = LO_E_SHUTDOWN;
   }

Return:
  if (SUCCEEDED(hr))
   {
    if (ppErrors) *ppErrors = err, err = 0;
//    if (items_ok != dwCount && hr == S_OK) hr = S_FALSE;
    UL_NOTICE((LOG_GRH("SyncIO:Write(%u) = %u Ok"), dwCount, items_ok));
   }
 else
   {
    UL_INFO((LOG_GRH("SyncIO:Write(%u) = %u /%s"),
               dwCount, items_ok, loStrError(hr)));
   }
 if (err) loComFree(err);
 LO_FINISH();
 return hr;
}


#define loUPL_AsyncWrite  (loUPL_variant | loUPL_tagpair | loUPL_opchandle | loUPL_errors)

/********** AsyncIO1:: */

STDMETHODIMP LightOPCGroup::Write(/* [in] */ DWORD dwConnection,
                                  /* [in] */ DWORD dwCount,
                                  /* [size_is][in] */ OPCHANDLE *phServer,
                                  /* [size_is][in] */ VARIANT *pItemValues,
                                  /* [out] */ DWORD           *pTransactionID,
                                  /* [size_is][size_is][out] */ HRESULT **ppErrors)
{
 HRESULT hr = S_FALSE;
 HRESULT *errs = 0;
 loRequest *rq = 0;
 unsigned item_ok = 0, items_ok = 0;

 LO_CHECK_STATEz1("AsyncIO:Write", ppErrors);

 UL_TRACE((LOG_GRH("AsyncIO:Write(%u)..."), dwCount));

 if (!phServer || !dwCount || !pTransactionID || !pItemValues)
   { hr = E_INVALIDARG; goto Return; }
 *pTransactionID = 0;
 if (owner->q_req.metric_overload) { hr = CONNECT_E_ADVISELIMIT; goto Return; }

 errs = (HRESULT*)loComAlloc(dwCount * sizeof(HRESULT));
 rq = lo_req_alloc(dwCount, loUPL_AsyncWrite);
 if (!rq || !errs) { hr = E_OUTOFMEMORY; goto Return; }
 loTagPair_init(rq->upl.tagpair, dwCount);

 rq->operation = loRQ_OP_WRITE | loRQ_CONN_WRITECOMPL | loRQ_DEVICE;
 rq->group_key = ServerHandle;
 rq->serv_key = owner->serv_key;
 rq->upl.rctx = owner->ctxt;

 lock_read();
 rq->upl.rctx.cta.vc_lcid = grLCID;

 if (owner->access_mode & loAM_RDONLY_OP)
   {
    unsigned ii;
    for(ii = 0; ii < dwCount; ii++) errs[ii] = OPC_E_BADRIGHTS;
    goto Unlock;
   }

 if (dwConnection != loRQ_CONN_WRITECOMPL ||
     0 == (advise_present & loRQ_CONN_WRITECOMPL)/*conn_writecompl*/)
   {
    hr = CONNECT_E_NOCONNECTION;
   }
 else
   {
    unsigned ii;
    loTagPair *tpl = rq->upl.tagpair;
    HRESULT *errors = rq->upl.errors;
    LightOPCItem *it;
    loTagEntry *tags = owner->se->tags;

    for(ii = 0; ii < dwCount; ii++, tpl++, errors++, pItemValues++)
      if (!(it = by_index(phServer[ii]))) errs[ii] = OPC_E_INVALIDHANDLE;
      else
        {
         loTagEntry *te = &tags[it->tid];

#if 0 != LO_CHECK_RIGHTS
         if (!(OPC_WRITEABLE & te->attr.taRights))
           { //errs[ii] = OPC_E_BADRIGHTS; - in callback
            *errors = OPC_E_BADRIGHTS;
           }
         else
#endif
              if (VT_EMPTY == V_VT(pItemValues) || /*) *errors = OPC_E_BADTYPE;
         else if (*/S_OK == (*errors =
                       VariantCopy(&rq->upl.variant[ii], pItemValues)))
           {
            tpl->tpTi = te->attr.taTi;
            tpl->tpRt = te->attr.taRt;
            tpl->tpAP = it->AcPath;
            items_ok++;
           }
         rq->upl.opchandle[ii] = it->hClient;
         errs[ii] = S_OK;
         item_ok++;
        }/* end of for */
   }
Unlock:
 unlock();

 if (dwCount == item_ok)
   {
    rq->upl.used = item_ok;
    rq->upl.master_err = items_ok == dwCount? S_OK: S_FALSE;
    if (0 == (*pTransactionID = lo_req_put_async(&owner->q_req, rq)))
      hr = CONNECT_E_ADVISELIMIT;
    else hr = S_OK;
    rq = 0;
   }

Return:
 if (rq) lo_req_free(rq);

 if (SUCCEEDED(hr))
   {
    if (ppErrors) *ppErrors = errs, errs = 0;
    UL_NOTICE((LOG_GRH("AsyncIO:Write(%u) = %u -> %x Ok"),
                       dwCount, item_ok, *pTransactionID));
   }
 else
   {
    UL_INFO((LOG_GRH("AsyncIO:Write[conn=%x advs=%x](%u) = %u /%s"),
               dwConnection, advise_present,
               dwCount, item_ok, loStrError(hr)));
   }
 if (errs) loComFree(errs);

 LO_FINISH();
 return hr;
}

/********** AsyncIO2:: */

STDMETHODIMP LightOPCGroup::Write(DWORD dwCount, OPCHANDLE *phServer, VARIANT *pItemValues,
		                  DWORD dwTransactionID, DWORD *pdwCancelID, HRESULT **ppErrors)
{
 HRESULT hr = S_FALSE;
 HRESULT *errs = 0;
 loRequest *rq = 0;
 unsigned items_ok = 0;

 LO_CHECK_STATEz1("AsyncIO2:Write", ppErrors);

 UL_TRACE((LOG_GRH("AsyncIO2:Write(%u)..."), dwCount));

 if (!phServer || !dwCount || !pdwCancelID || !pItemValues)
   { hr = E_INVALIDARG; goto Return; }
 *pdwCancelID = 0;
 if (owner->q_req.metric_overload) { hr = CONNECT_E_ADVISELIMIT; goto Return; }

 errs = (HRESULT*)loComAlloc(dwCount * sizeof(HRESULT));
 rq = lo_req_alloc(dwCount, loUPL_AsyncWrite);
 if (!rq || !errs) { hr = E_OUTOFMEMORY; goto Return; }
 loTagPair_init(rq->upl.tagpair, dwCount);
 rq->operation = loRQ_OP_WRITE | loRQ_CONN_DATABACK | loRQ_DEVICE;
 rq->group_key = ServerHandle;
 rq->serv_key = owner->serv_key;
 rq->upl.transaction_id = dwTransactionID;
 rq->upl.rctx = owner->ctxt;

 lock_read();
 rq->upl.rctx.cta.vc_lcid = grLCID;

 if (owner->access_mode & loAM_RDONLY_OP)
   {
    unsigned ii;
    for(ii = 0; ii < dwCount; ii++) errs[ii] = OPC_E_BADRIGHTS;
    goto Unlock;
   }

 if (0 == (advise_present & loRQ_CONN_DATABACK)/*conn_databack*/)
   hr = CONNECT_E_NOCONNECTION;
 else
   {
    unsigned ii;
    loTagPair *tpl = rq->upl.tagpair;
//    HRESULT *errors = rq->upl.errors;
    LightOPCItem *it;
    loTagEntry *tags = owner->se->tags;

    for(ii = 0; ii < dwCount; ii++, pItemValues++)
      if (!(it = by_index(phServer[ii]))) errs[ii] = OPC_E_INVALIDHANDLE;
      else
        {
         loTagEntry *te = &tags[it->tid];

#if 0 != LO_CHECK_RIGHTS
         if (!(OPC_WRITEABLE & te->attr.taRights)) errs[ii] = OPC_E_BADRIGHTS;
         else
#endif
              if (VT_EMPTY == V_VT(pItemValues) || /*) *errors = OPC_E_BADTYPE;
         else if (*/S_OK == (errs[ii] =
                       VariantCopy(&rq->upl.variant[ii], pItemValues)))
           {
            tpl->tpTi = te->attr.taTi;
            tpl->tpRt = te->attr.taRt;
            tpl->tpAP = it->AcPath;
            tpl++;
            rq->upl.opchandle[items_ok++] = it->hClient;
            errs[ii] = S_OK;
           }
        }/* end of for */
   }
Unlock:
 unlock();

 if (items_ok)
   {
    rq->upl.used = items_ok;
    rq->upl.master_err = hr = items_ok == dwCount? S_OK: S_FALSE;
    if (0 == (*pdwCancelID = lo_req_put_async(&owner->q_req, rq)))
      hr = CONNECT_E_ADVISELIMIT;
    rq = 0;
   }

Return:
 if (rq) lo_req_free(rq);

 if (SUCCEEDED(hr))
   {
    if (ppErrors) *ppErrors = errs, errs = 0;
    UL_NOTICE((LOG_GRH("AsyncIO2:Write(%u) = %u -> %x Ok"),
                       dwCount, items_ok, *pdwCancelID));
   }
 else
   {
    UL_INFO((LOG_GRH("AsyncIO2:Write(%u) = %u /%s"),
               dwCount, items_ok, loStrError(hr)));
   }
 if (errs) loComFree(errs);

 LO_FINISH();
 return hr;
}


/* end of iowrite.cpp */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久国产综合色|国产精品| 91偷拍与自偷拍精品| 国产精品对白交换视频| 制服丝袜亚洲精品中文字幕| 国产精品一区在线观看乱码| 亚洲国产日日夜夜| 国产日产欧美一区二区视频| 91麻豆精品国产91久久久资源速度 | 欧美日韩中文另类| 国产精品中文字幕日韩精品| 日本最新不卡在线| 亚洲制服丝袜一区| 136国产福利精品导航| 精品sm在线观看| 欧美电影在哪看比较好| 99久久精品免费精品国产| 国产一级精品在线| 久久精品国产免费看久久精品| 午夜激情一区二区| 一区二区成人在线| 亚洲人成伊人成综合网小说| 久久午夜电影网| 日韩欧美你懂的| 91精品国产色综合久久不卡蜜臀| 91理论电影在线观看| www.亚洲色图| av不卡免费在线观看| 国产最新精品免费| 日韩精品国产精品| 视频一区欧美精品| 亚洲精品日韩专区silk| 日本一区二区三级电影在线观看| 91麻豆精品91久久久久同性| 色先锋资源久久综合| 国产电影一区二区三区| 蜜乳av一区二区| 婷婷成人综合网| 亚洲综合激情小说| 中文字幕在线观看不卡视频| 欧美日韩亚洲综合在线| av在线不卡电影| 国产精品一二三在| 青青草视频一区| 首页国产欧美久久| 亚洲综合丝袜美腿| 亚洲精品亚洲人成人网 | 成人免费视频免费观看| 激情图区综合网| 久久www免费人成看片高清| 天天操天天色综合| 一区二区三区在线影院| 亚洲电影视频在线| 亚洲成人激情综合网| 亚洲精品乱码久久久久久| 国产精品久久夜| 中文av一区二区| 中文一区在线播放| 国产精品免费视频网站| 中文字幕国产一区| 国产精品乱人伦| 国产精品美女久久久久久久久久久 | 一区二区久久久| 最新热久久免费视频| 亚洲欧美日韩国产成人精品影院| 中文字幕亚洲区| 亚洲欧美日韩一区| 亚洲一级电影视频| 亚洲成人在线网站| 日本亚洲视频在线| 亚洲国产欧美在线| 中文字幕制服丝袜成人av | 精品久久久久久久久久久院品网 | 2欧美一区二区三区在线观看视频| 欧美大白屁股肥臀xxxxxx| 欧美大度的电影原声| 久久免费视频一区| 国产精品卡一卡二卡三| 一区二区三区不卡在线观看| 亚洲自拍偷拍麻豆| 亚洲欧美激情插| 日韩电影在线看| 国产精品一二三四区| 99r精品视频| 欧美日本一区二区三区| 日韩欧美国产一区在线观看| 久久久91精品国产一区二区精品| 中文字幕不卡的av| 亚洲成av人**亚洲成av**| 裸体在线国模精品偷拍| 成人一区二区三区| 欧美亚洲免费在线一区| 日韩一级二级三级精品视频| 国产日韩精品视频一区| 国产精品国产三级国产aⅴ原创| 视频一区在线视频| 国产91精品精华液一区二区三区 | 日韩欧美国产不卡| 国产日韩高清在线| 亚洲第一主播视频| 国产精品 日产精品 欧美精品| 99精品视频一区二区三区| 欧美高清视频不卡网| 国产欧美日韩精品a在线观看| 一区二区三区四区蜜桃| 国产一区二区调教| 欧美日韩国产综合久久| 91精品国产色综合久久不卡电影| 3atv一区二区三区| 亚洲乱码日产精品bd| 激情综合网最新| 色欧美乱欧美15图片| 亚洲精品在线三区| 亚洲国产精品一区二区久久 | 亚洲欧美另类久久久精品2019| 蜜臀精品一区二区三区在线观看| 97精品久久久午夜一区二区三区| 欧美成人高清电影在线| 国产欧美视频在线观看| 午夜av一区二区| 91黄色激情网站| 欧美高清在线精品一区| 日韩国产精品久久久| 99精品国产视频| 久久久久久久久久电影| 无码av免费一区二区三区试看 | 99免费精品视频| 欧美一级视频精品观看| 国产精品成人免费精品自在线观看| 久久99在线观看| 欧美日韩视频在线第一区 | 韩国v欧美v日本v亚洲v| 欧美一区二区人人喊爽| 天天综合日日夜夜精品| 色综合久久99| 国产精品私人自拍| 国产一区啦啦啦在线观看| 欧美一区二区在线看| 夜夜嗨av一区二区三区四季av| k8久久久一区二区三区| 2023国产精品自拍| 美女www一区二区| 欧美电影影音先锋| 亚洲成av人片一区二区| 欧美色图天堂网| 一区二区欧美视频| 成人午夜激情在线| 日韩一区二区在线播放| 首页国产丝袜综合| 欧美日本精品一区二区三区| 亚洲自拍另类综合| 欧美性大战久久久久久久蜜臀 | 天天影视色香欲综合网老头| 欧美色欧美亚洲另类二区| 亚洲综合在线第一页| 欧洲精品中文字幕| 一区二区三区在线看| 色婷婷av一区二区三区之一色屋| 综合久久久久久| 一本大道久久a久久精二百| 国产欧美一区二区精品忘忧草 | 国产精品一区二区三区99| 久久久一区二区三区| 国内精品伊人久久久久av影院| 精品入口麻豆88视频| 国产又黄又大久久| 国产精品无人区| 972aa.com艺术欧美| 亚洲欧洲国产专区| 欧美三级在线播放| 蜜桃视频在线观看一区二区| 日韩精品一区国产麻豆| 国产在线视频不卡二| 国产欧美日韩视频一区二区| 99久久伊人久久99| 亚洲黄色免费电影| 欧美日韩国产成人在线免费| 久久99蜜桃精品| 久久综合九色综合欧美98| 丰满白嫩尤物一区二区| 亚洲激情图片qvod| 欧美老女人在线| 国产一区在线观看麻豆| 国产精品每日更新| 欧美写真视频网站| 日韩精彩视频在线观看| 久久蜜臀精品av| 色悠悠久久综合| 日本va欧美va瓶| 久久久99久久| 欧美体内she精视频| 久久国产视频网| 最新热久久免费视频| 欧美精品一级二级三级| 国产麻豆精品95视频| 亚洲欧美日韩中文播放 | 亚洲精品成人悠悠色影视| 91精品国产综合久久久久久漫画| 视频在线观看一区二区三区| 久久久久久久久久久电影| 色综合一个色综合|