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

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

?? iadvsink.cpp

?? 一個OPC客戶端監視程序
?? CPP
字號:
/**************************************************************************
   頭文件在 OpcClientSpyDoc.h
   Description:  Unpacks the OPC Data Access 1.0 data stream.
**************************************************************************/
#include "stdafx.h"
#include "OPCClientSpy.h"
#include "ValueMsgView.h"
#include "IAdvSink.hpp"
#include <afxadv.h>

extern CValueMsgView *theMsgValue;
// The OPC data formats
UINT OPCSTMFORMATDATA = RegisterClipboardFormat(_T("OPCSTMFORMATDATA"));
UINT OPCSTMFORMATDATATIME = RegisterClipboardFormat(_T("OPCSTMFORMATDATATIME"));
UINT OPCSTMFORMATWRITECOMPLETE = RegisterClipboardFormat(_T("OPCSTMFORMATWRITECOMPLETE"));

CAdviseSink::CAdviseSink()
{
    m_cRef=0;
}

CAdviseSink::~CAdviseSink(void)
{
}

//QueryInterface
STDMETHODIMP CAdviseSink::QueryInterface(REFIID riid, void** ppv)
{
    *ppv=NULL;
    if( riid==IID_IUnknown || riid==IID_IAdviseSink )
        *ppv=this;
    if( *ppv!=NULL )
    {
        ((LPUNKNOWN)*ppv)->AddRef();
        return NOERROR;
    }
    return ResultFromScode(E_NOINTERFACE);
}


STDMETHODIMP_(ULONG) CAdviseSink::AddRef(void)
{
    return ++m_cRef;
}


STDMETHODIMP_(ULONG) CAdviseSink::Release(void)
{
    if (0!=--m_cRef)
        return m_cRef;

	delete this;
    return 0;
}



/*
 * CAdviseSink::OnDataChange
 *
 * Purpose:
 *  Notifes the advise sink that data changed in a data object.
 *  On this message you may request a new data rendering and update
 *  your displays as necessary.  Any data sent to this function is
 *  owned by the caller, not by this advise sink.
 *
 *  All Advise Sink methods are asynchronous and therefore we
 *  should attempt no synchronous calls from within them to an EXE
 *  object.  If we do, we'll get RPC_E_CALLREJECTED.
 *
 * Parameters:
 *  pFEIn           LPFORMATETC describing format that changed
 *  pSTM            LPSTGMEDIUM providing the medium in which the
 *                  data is provided.
 *
 * Return Value:
 *  None
 */
STDMETHODIMP_(void) CAdviseSink::OnDataChange(LPFORMATETC pFE
    , LPSTGMEDIUM pSTM)
{
   // Verify the format follows the OPC spec
   if( TYMED_HGLOBAL != pFE->tymed )
      return;
   if( pSTM->hGlobal == 0 )
      return;
#ifdef DATATIMEFORMAT
		if( OPCSTMFORMATDATATIME != pFE->cfFormat )
#else
		if( OPCSTMFORMATDATA != pFE->cfFormat )
#endif // DATATIMEFORMAT
   {
      OnWriteComplete(pFE, pSTM);
      return;
   }

   // It must be a data advise
   const BYTE* buffer = (BYTE*)GlobalLock( pSTM->hGlobal );
   if( !buffer )
      return;

   const OPCGROUPHEADER* pHeader = (OPCGROUPHEADER*)buffer;
   // check pHeader->hClientGroup
   // pHeader->dwTransactionID
   // pHeader->hrStatus
   int offset = sizeof(OPCGROUPHEADER);
   // for each item in the data stream, get the value and quality
#ifdef DATATIMEFORMAT
   for( DWORD index=0; index<pHeader->dwItemCount; index++, offset += sizeof(OPCITEMHEADER1) )
      {
      const OPCITEMHEADER1* pItemHeader = (OPCITEMHEADER1*)&buffer[offset];
      Item* pItem = (Item*)pItemHeader->hClient;
      pItem->timestamp = pItemHeader->ftTimeStampItem;
#else
   for( DWORD index=0; index<pHeader->dwItemCount; index++, offset += sizeof(OPCITEMHEADER2) )
      {
      const OPCITEMHEADER2* pItemHeader = (OPCITEMHEADER2*)&buffer[offset];
      Item* pItem = (Item*)pItemHeader->hClient;
#endif // DATATIMEFORMAT

      VARIANT* pValue = (VARIANT*)&buffer[pItemHeader->dwValueOffset];
      // Strings and arrays are packed in the stream
      // requiring unpacking
      if( pValue->vt == VT_BSTR )
        {
        pValue->bstrVal = (BSTR)((BYTE*)pValue + sizeof(VARIANT) + sizeof(DWORD));
        }
      else if( (pValue->vt & VT_ARRAY) == VT_ARRAY )
        {
        pValue->parray = (SAFEARRAY*)((BYTE*)pValue + sizeof(VARIANT));
        pValue->parray->pvData = ((BYTE*)pValue->parray + sizeof(SAFEARRAY));
        if( pValue->vt == (VT_ARRAY|VT_BSTR) )
           {
           BSTR* pStrings = (BSTR*)pValue->parray->pvData;
           LONG lBound=0;
           LONG uBound=0;
           SafeArrayGetLBound(pValue->parray, 1, &lBound);
           SafeArrayGetUBound(pValue->parray, 1, &uBound);
           ULONG dataSize = pValue->parray->rgsabound[0].cElements * pValue->parray->cbElements;
           BSTR bstr = (BSTR)((BYTE*)pValue->parray->pvData + dataSize + sizeof(DWORD));

           for( LONG index=0; index<=uBound-lBound; index++ )
              {
              pStrings[index] = bstr;
              ULONG len = SysStringByteLen( bstr )+sizeof(DWORD)+sizeof(WCHAR);
              bstr = (BSTR)((BYTE*)bstr + len);
              }
           }
        }
      pItem->value = pValue;
      pItem->quality = pItemHeader->wQuality;
      }

	GlobalUnlock( pSTM->hGlobal );
	PostMessage(*theMsgValue, WM_OPCDATA, 0, 0);
	return;
}



STDMETHODIMP_(void) CAdviseSink::OnWriteComplete(LPFORMATETC pFE
    , LPSTGMEDIUM pSTM)
{
   const BYTE* buffer = (BYTE*)GlobalLock( pSTM->hGlobal );
   if( !buffer )
      return;

   const OPCGROUPHEADERWRITE* pHeader = (OPCGROUPHEADERWRITE*)buffer;
   if( FAILED(pHeader->hrStatus) )
   {
      PostMessage(*theMsgValue, WM_OPCWRITE, pHeader->hrStatus, 0);
   }
   else
   {
      int offset = sizeof(OPCGROUPHEADERWRITE);
      // for each item in the data stream, access its data
      for( DWORD index=0; index<pHeader->dwItemCount; index++, offset += sizeof(OPCITEMHEADERWRITE) )
      {
         const OPCITEMHEADERWRITE* pItemHeader = (OPCITEMHEADERWRITE*)&buffer[offset];
         if( FAILED(pItemHeader->dwError) )
         {
            PostMessage(*theMsgValue, WM_OPCWRITE, pItemHeader->dwError, 0);
         }
      }
   }
   GlobalUnlock( pSTM->hGlobal );

   return;
}


/*
 * CAdviseSink::OnViewChange
 * CAdviseSink::OnRename
 * CAdviseSink::OnSave
 * CAdviseSink::OnClose
 *
 * Unimplemented members
 */

STDMETHODIMP_(void) CAdviseSink::OnViewChange(DWORD dwAspect
    , LONG lindex)
{
    return;
}

STDMETHODIMP_(void) CAdviseSink::OnRename(LPMONIKER pmk)
{
    return;
}

STDMETHODIMP_(void) CAdviseSink::OnSave(void)
{
    return;
}

STDMETHODIMP_(void) CAdviseSink::OnClose(void)
{
    return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区免费乱视频| 亚洲美女在线一区| 亚洲欧洲三级电影| 天堂在线一区二区| 一本色道久久综合亚洲精品按摩| 91精品国产入口| 亚洲精选在线视频| 国产a视频精品免费观看| 9191成人精品久久| 亚洲黄色性网站| 成人午夜大片免费观看| 欧美mv和日韩mv的网站| 亚洲成av人片| 色拍拍在线精品视频8848| 久久久精品免费网站| 欧美日韩黄色影视| 最新热久久免费视频| 国产一区二区三区在线观看精品 | 亚洲成人在线观看视频| 不卡av电影在线播放| 2023国产精品自拍| 美脚の诱脚舐め脚责91| 欧美日韩国产综合草草| 一区二区国产视频| 一本到高清视频免费精品| 中国av一区二区三区| 国产老妇另类xxxxx| 26uuu久久天堂性欧美| 日韩高清在线一区| 91精品国产91久久久久久一区二区| 亚洲精品一二三四区| 色综合天天狠狠| 亚洲视频香蕉人妖| 色屁屁一区二区| 亚洲一区二区在线观看视频| 日本韩国精品在线| 欧美精品成人一区二区三区四区| 亚洲不卡一区二区三区| 欧美群妇大交群中文字幕| 婷婷激情综合网| 91精品免费观看| 蜜桃一区二区三区在线| 精品国产一区二区精华| 韩国一区二区在线观看| 国产日韩av一区二区| 成人在线综合网站| 国产精品电影一区二区三区| 亚洲精品大片www| 欧美伊人精品成人久久综合97| 亚洲h在线观看| 日韩女优av电影| 国产美女一区二区| 亚洲人快播电影网| 欧美色欧美亚洲另类二区| 天堂蜜桃一区二区三区| 久久久www成人免费无遮挡大片| 成人午夜私人影院| 亚洲欧美成aⅴ人在线观看| 亚洲v中文字幕| 久久久噜噜噜久久人人看 | 国产精品福利一区二区三区| 色综合久久久久久久| 日韩av在线播放中文字幕| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久久久国色av免费看影院| av亚洲产国偷v产偷v自拍| 欧美日韩国产乱码电影| 久久99久久久欧美国产| 国产精品不卡在线| 欧美精品第1页| 成人免费av网站| 亚洲成人自拍网| 国产三级欧美三级| 欧美电影一区二区三区| 国产乱淫av一区二区三区 | 国产拍揄自揄精品视频麻豆| 在线视频一区二区免费| 337p粉嫩大胆噜噜噜噜噜91av| 一本大道久久a久久精二百| 男女性色大片免费观看一区二区| 中国色在线观看另类| 欧美一区二区三区四区高清| 99久久夜色精品国产网站| 麻豆91精品视频| 亚洲人成精品久久久久久| 欧美精品一区二区在线观看| 精品视频色一区| 波多野结衣亚洲| 久久99蜜桃精品| 日韩免费观看高清完整版在线观看| youjizz国产精品| 美女网站色91| 天堂va蜜桃一区二区三区漫画版| 国产精品色一区二区三区| 日韩一区二区三区电影在线观看| 一本大道综合伊人精品热热| 高清免费成人av| 国产一区二区免费看| 日韩av网站免费在线| 一区二区三区四区在线播放 | 欧美一区二区三区视频免费| 色悠悠亚洲一区二区| 亚洲色图欧美偷拍| 国产欧美日韩三区| 久久久久久久久久久黄色| 欧美日韩三级在线| 色偷偷久久人人79超碰人人澡| 国产高清成人在线| 麻豆国产91在线播放| 日韩av不卡在线观看| 亚洲成a人片在线观看中文| 亚洲美女屁股眼交3| 国产精品成人免费精品自在线观看| 日本一区二区动态图| 国产午夜久久久久| 国产日韩欧美麻豆| 国产日韩欧美一区二区三区综合| 欧美经典三级视频一区二区三区| 亚洲国产精品高清| 国产精品美女久久久久久久| 国产精品国产三级国产专播品爱网| 日本一区二区三区视频视频| 中文字幕制服丝袜一区二区三区 | 亚洲va欧美va人人爽| 午夜精品久久一牛影视| 午夜精品在线看| 日韩电影在线一区二区| 日本vs亚洲vs韩国一区三区 | 亚洲最大成人网4388xx| 亚洲国产va精品久久久不卡综合| 亚洲影视在线播放| 欧美aaa在线| 极品美女销魂一区二区三区免费| 国产一区二区女| 91一区二区在线| 欧美性做爰猛烈叫床潮| 91精品国产综合久久精品图片 | 亚洲中国最大av网站| 亚洲不卡av一区二区三区| 秋霞成人午夜伦在线观看| 黑人巨大精品欧美一区| 91浏览器入口在线观看| 久久精品国产秦先生| 国产成人精品免费在线| 一本大道久久a久久综合| 欧美一区午夜精品| 国产日韩欧美精品一区| 一区二区欧美视频| 久久电影国产免费久久电影| 床上的激情91.| 欧美日韩国产片| 久久精品一区二区三区av| 亚洲视频小说图片| xnxx国产精品| 一区二区三区四区在线免费观看| 另类中文字幕网| 91麻豆精东视频| 久久综合九色综合欧美亚洲| 亚洲日穴在线视频| 麻豆精品视频在线| 99精品久久久久久| 精品免费日韩av| 亚洲在线成人精品| 国产成人精品一区二| 91精品国产综合久久久久久久| 国产精品久久二区二区| 精品一区二区日韩| 日韩一区欧美二区| 91免费观看在线| www久久精品| 日本三级韩国三级欧美三级| www..com久久爱| 久久影院午夜论| 日本欧美在线观看| 欧美中文字幕亚洲一区二区va在线| 国产欧美日韩激情| 激情国产一区二区| 3d成人h动漫网站入口| 亚洲美女在线国产| 99精品视频一区二区三区| 国产午夜精品一区二区三区嫩草| 日本不卡一二三区黄网| 欧美午夜不卡在线观看免费| 中文字幕中文乱码欧美一区二区| 国产剧情在线观看一区二区| 日韩精品专区在线影院观看| 午夜精品福利视频网站| 欧美亚洲综合一区| 亚洲国产日韩综合久久精品| 色就色 综合激情| 中文字幕一区二区三区四区| 国产激情一区二区三区桃花岛亚洲| 日韩欧美国产电影| 美日韩一区二区三区| 欧美一区二区三区公司| 丝瓜av网站精品一区二区| 欧美日韩成人一区二区| 午夜精品福利一区二区三区av| 欧美片网站yy| 男男视频亚洲欧美|