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

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

?? opcwrap.h

?? 一個opc服務器
?? H
?? 第 1 頁 / 共 2 頁
字號:
//**************************************************************************
//
//  Copyright (c) FactorySoft, INC. 1996-1998, All Rights Reserved
//
//**************************************************************************
//
//  Filename   :  OPCWrap.h
//  $Author    :  Jim Hansen
//
//  Subsystem  :  FactorySoft OPC Client
//
//  Description:  Template wrapper classes for the OPC COM interfaces
//                These classes automatically QueryInterface, AddRef, and
//                Release when they are done, reducing reference count errors.
//
//**************************************************************************

#ifndef __OPCWRAP_H__               // Only Include Once
#define __OPCWRAP_H__

#include "opcda.h"
#include "opccomn.h"

#ifdef _DEBUG
#define TRACE_MSG(call, hr)  { \
      TRACE(_T("hr=%lx\n"), (hr));  \
      TCHAR msg[MAX_PATH*5]; \
      FormatMessage( FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, \
                     NULL, \
                     GetScode( hr ), \
                     MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), \
                     msg, MAX_PATH, NULL ); \
      TRACE(msg); \
      TRACE(_T("\n")); \
      ::MessageBox( 0, msg, call, MB_OK ); \
      }
#else
#define TRACE_MSG(call,hr)  ;   // an empty statement
#endif


//*******************************************************************
template <class T, const IID* pIID>
class OInterfaceWrap
{
public:
    OInterfaceWrap() : m_pI(NULL) {}
    ~OInterfaceWrap() { Detach(); }

    operator T*() {return m_pI;}
    operator IUnknown*() {return (IUnknown*)m_pI;}
    operator IUnknown**() {return (IUnknown**)&m_pI;}
    operator LPVOID *() {return (LPVOID *)&m_pI;}

    HRESULT Attach(IUnknown* pUnk)
                {
                ASSERT( pUnk != NULL );
                if( m_pI == pUnk)
                    return S_OK;
                Detach();
                HRESULT hr = pUnk->QueryInterface( *pIID, (LPVOID*)&m_pI);
//                if( FAILED(hr) )
//                    TRACE_MSG(_T("QueryInterface"),hr);
                return hr;
                }

    HRESULT Attach(T* pI)
                {
                ASSERT( pI != NULL );
                if( m_pI == pI)
                    return S_OK;
                Detach();
                m_pI = pI;
                m_pI->AddRef();
                return S_OK;
                }

    void Detach()
                {
                if( m_pI )
                    m_pI->Release();
                m_pI = NULL;
                }

    HRESULT QueryInterface(REFIID iid, void ** ppvObject)
                {
                if( m_pI )
                    return m_pI->QueryInterface(iid, ppvObject);
                return E_FAIL;
                }

    BOOL IsOk() const {return (m_pI != NULL); }

protected:
    T* m_pI;
};

//*******************************************************************
//  Server Interfaces
//*******************************************************************
typedef OInterfaceWrap<IOPCServer, &IID_IOPCServer> IOPCServerWrap;

class OPCServer : public IOPCServerWrap
{
public:
    OPCServer() {}

    HRESULT AddGroup(
                LPCWSTR     szName,
                BOOL        bActive,
                DWORD       dwRequestedUpdateRate,
                OPCHANDLE   hClientGroup,
                LONG      * pTimeBias,
                FLOAT     * pPercentDeadband,
                DWORD       dwLCID,
                OPCHANDLE * phServerGroup,
                DWORD     * pRevisedUpdateRate,
                REFIID      riid,
                LPUNKNOWN * ppUnk)
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->AddGroup(szName, bActive, dwRequestedUpdateRate,
                                hClientGroup, pTimeBias, pPercentDeadband,
                                dwLCID, phServerGroup, pRevisedUpdateRate,
                                riid, ppUnk );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCServer::AddGroup"),hr);
        return hr; }

    HRESULT GetErrorString(
               HRESULT     dwError,
               LCID     dwLocale,
               LPWSTR     *   ppString)
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->GetErrorString( dwError, dwLocale, ppString );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCServer::GetErrorString"),hr);
        return hr; }

    HRESULT GetGroupByName(
               LPCWSTR     szName,
               REFIID      riid,
               LPUNKNOWN * ppUnk)
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->GetGroupByName( szName, riid, ppUnk );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCServer::GetGroupByName"),hr);
        return hr; }

    HRESULT GetStatus(OPCSERVERSTATUS **ppServerStatus)
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->GetStatus( ppServerStatus );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCServer::GetStatus"),hr);
        return hr; }

    HRESULT RemoveGroup(
               OPCHANDLE   hServerGroup,
               BOOL     bForce)
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->RemoveGroup( hServerGroup, bForce );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCServer::RemoveGroup"),hr);
        return hr; }

    HRESULT CreateGroupEnumerator(
               OPCENUMSCOPE dwScope,
               REFIID      riid,
               LPUNKNOWN * ppUnk)
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->CreateGroupEnumerator( dwScope, riid, ppUnk );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCServer::CreateGroupEnumerator"),hr);
        return hr; }
};

//*******************************************************************
typedef OInterfaceWrap<IOPCItemProperties,
   &IID_IOPCItemProperties> IOPCItemPropertiesWrap;

class OPCItemProperties : public IOPCItemPropertiesWrap
{
public:
    OPCItemProperties() {}

    HRESULT QueryAvailableProperties(
               LPWSTR szItemID,
               DWORD *pdwCount,
               DWORD **ppPropertyIDs,
               LPWSTR **ppDescriptions,
               VARTYPE **ppvtDataTypes)
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->QueryAvailableProperties( szItemID,
                        pdwCount, ppPropertyIDs, ppDescriptions, ppvtDataTypes );
        if( FAILED( hr ) )
            TRACE_MSG(_T("OPCItemProperties::QueryAvailableProperties"),hr);
        return hr; }

    HRESULT GetItemProperties(
               LPWSTR szItemID,
               DWORD dwCount,
               DWORD *pdwPropertyIDs,
               VARIANT **ppvData,
               HRESULT **ppErrors)
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->GetItemProperties( szItemID,
                        dwCount, pdwPropertyIDs, ppvData, ppErrors );
        if( FAILED( hr ) )
            TRACE_MSG(_T("OPCItemProperties::QueryAvailableProperties"),hr);
        return hr; }

    HRESULT LookupItemIDs(
               LPWSTR szItemID,
               DWORD dwCount,
               DWORD *pdwPropertyIDs,
               LPWSTR **ppszNewItemIDs,
               HRESULT **ppErrors)
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->LookupItemIDs( szItemID,
                        dwCount, pdwPropertyIDs, ppszNewItemIDs, ppErrors );
        if( FAILED( hr ) )
            TRACE_MSG(_T("OPCItemProperties::QueryAvailableProperties"),hr);
        return hr; }
};

//*******************************************************************
typedef OInterfaceWrap<IOPCServerPublicGroups,
   &IID_IOPCServerPublicGroups> IOPCServerPublicGroupsWrap;

class OPCServerPublicGroups : public IOPCServerPublicGroupsWrap
{
public:
    OPCServerPublicGroups() {}
// not yet implemented
};

//*******************************************************************
typedef OInterfaceWrap<IOPCBrowseServerAddressSpace,
   &IID_IOPCBrowseServerAddressSpace> IOPCBrowseServerAddressSpaceWrap;

class OPCBrowseServerAddressSpace : public IOPCBrowseServerAddressSpaceWrap
{
public:
    OPCBrowseServerAddressSpace() {}

   HRESULT QueryOrganization( OPCNAMESPACETYPE * pNameSpaceType)
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->QueryOrganization( pNameSpaceType );
        if( FAILED( hr ) )
            TRACE_MSG(_T("Browse::QueryOrganization"),hr);
        return hr; }

   HRESULT ChangeBrowsePosition(
                     OPCBROWSEDIRECTION dwBrowseDirection,
                     LPCWSTR           szString)
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->ChangeBrowsePosition( dwBrowseDirection, szString );
//        if( FAILED( hr ) )  // error means can't go farther, etc.
//            TRACE_MSG(_T("Browse::ChangeBrowsePosition"),hr);
        return hr; }

   HRESULT BrowseOPCItemIDs(
                     OPCBROWSETYPE     dwBrowseFilterType,
                     LPCWSTR           szFilterCriteria,
                     VARTYPE           vtDataTypeFilter,
                     DWORD             dwAccessRightsFilter,
                     LPENUMSTRING *    ppIEnumString)
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->BrowseOPCItemIDs( dwBrowseFilterType, szFilterCriteria,
                              vtDataTypeFilter, dwAccessRightsFilter, ppIEnumString );
        if( FAILED( hr ) )
            TRACE_MSG(_T("Browse::BrowseOPCItemIDs"),hr);
        return hr; }

   HRESULT GetItemID(LPWSTR   szItemDataID,
                     LPWSTR * szItemID)
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->GetItemID( szItemDataID, szItemID );
        if( FAILED( hr ) )
            TRACE_MSG(_T("Browse::GetItemID"),hr);
        return hr; }

   HRESULT BrowseAccessPaths( LPCWSTR        szItemID,
                              LPENUMSTRING * ppIEnumString)
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->BrowseAccessPaths( szItemID, ppIEnumString );
        if( FAILED( hr ) )
            TRACE_MSG(_T("Browse::BrowseAccessPaths"),hr);
        return hr; }
};

//*******************************************************************
//    Group Interfaces
//*******************************************************************
typedef OInterfaceWrap<IOPCGroupStateMgt,
   &IID_IOPCGroupStateMgt> IOPCGroupStateMgtWrap;

class OPCGroupStateMgt : public IOPCGroupStateMgtWrap
{
public:
    OPCGroupStateMgt() {}

   HRESULT GetState( DWORD     * pUpdateRate,
                     BOOL      * pActive,
                     LPWSTR    * ppName,
                     LONG      * pTimeBias,
                     FLOAT     * pPercentDeadband,
                     DWORD     * pLCID,
                     OPCHANDLE * phClientGroup,
                     OPCHANDLE * phServerGroup )
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->GetState( pUpdateRate, pActive, ppName, pTimeBias,
                              pPercentDeadband, pLCID, phClientGroup, phServerGroup );
        if( FAILED( hr ) )
            TRACE_MSG(_T("OPCGroupStateMgt::GetState"),hr);
        return hr; }

   HRESULT SetState( DWORD     * pRequestedUpdateRate,
                     DWORD     * pRevisedUpdateRate,
                     BOOL      * pActive,
                     LONG      * pTimeBias,
                     FLOAT     * pPercentDeadband,
                     DWORD     * pLCID,
                     OPCHANDLE * phClientGroup )
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->SetState( pRequestedUpdateRate, pRevisedUpdateRate, pActive,
                              pTimeBias, pPercentDeadband, pLCID, phClientGroup );
        if( FAILED( hr ) )
            TRACE_MSG(_T("OPCGroupStateMgt::SetState"),hr);
        return hr; }

   HRESULT SetName( LPCWSTR szName )
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->SetName( szName );
        if( FAILED( hr ) )
            TRACE_MSG(_T("OPCGroupStateMgt::SetName"),hr);
        return hr; }

   HRESULT CloneGroup(LPCWSTR     szName,
                      REFIID      riid,
                      LPUNKNOWN * ppUnk )
        { //ASSERT( IsOk() );
        if( !IsOk() )
           return E_FAIL;
        HRESULT hr = m_pI->CloneGroup( szName, riid, ppUnk );
        if( FAILED( hr ) )
            TRACE_MSG(_T("OPCGroupStateMgt::CloneGroup"),hr);
        return hr; }
};

//*******************************************************************
typedef OInterfaceWrap<IOPCPublicGroupStateMgt,
   &IID_IOPCPublicGroupStateMgt> IOPCPublicGroupStateMgtWrap;

class OPCPublicGroupStateMgt : public IOPCPublicGroupStateMgtWrap
{
public:
   OPCPublicGroupStateMgt() {}

   HRESULT GetState( BOOL * pPublic )
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->GetState( pPublic );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCPublicGroupStateMgt::GetState"),hr);
        return hr; }

   HRESULT MoveToPublic( void )
        { //ASSERT( IsOk() );
        HRESULT hr = m_pI->MoveToPublic( );
        if( FAILED( hr ) )
            TRACE_MSG(_T("IOPCPublicGroupStateMgt::MoveToPublic"),hr);
        return hr; }

};

//*******************************************************************
typedef OInterfaceWrap<IOPCSyncIO, &IID_IOPCSyncIO> IOPCSyncIOWrap;

class OPCSyncIO : public IOPCSyncIOWrap
{
public:
    OPCSyncIO() {}

   HRESULT Read(  OPCDATASOURCE   dwSource,
                  DWORD           dwNumItems,
                  OPCHANDLE     * phServer,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲欧洲一区高清在线观看| 日韩欧美一区电影| 国产人成亚洲第一网站在线播放| 国产精品亚洲午夜一区二区三区| 中文字幕在线不卡国产视频| 97精品视频在线观看自产线路二| 午夜精品视频一区| 久久久久久久久久看片| 91亚洲永久精品| 日韩成人伦理电影在线观看| 日本一区二区三区国色天香 | 欧美日韩www| 国内国产精品久久| 一级做a爱片久久| 精品国产乱码久久久久久闺蜜| bt欧美亚洲午夜电影天堂| 国产精品久久久久久久蜜臀 | 在线视频一区二区三| 久久成人免费日本黄色| 亚洲美女在线国产| 日韩精品一区二区在线| 91亚洲精品久久久蜜桃网站 | 国产精品午夜久久| 欧美猛男超大videosgay| 粉嫩av一区二区三区在线播放 | 欧美一区二区三区电影| 成a人片亚洲日本久久| 奇米影视一区二区三区| 日韩伦理免费电影| 欧美一区二区三区男人的天堂| aaa亚洲精品| 国产一区福利在线| 亚洲123区在线观看| 国产精品国产a| 精品国产一区久久| 欧美丰满嫩嫩电影| 91官网在线观看| 99在线精品观看| 国产成人av资源| 国产综合久久久久影院| 国产精品二三区| 中文av一区二区| 亚洲制服欧美中文字幕中文字幕| 国产欧美一区视频| 精品国产伦一区二区三区免费| 色婷婷综合久久久久中文一区二区| 处破女av一区二区| 国产成人免费视频| 国产酒店精品激情| 高清视频一区二区| 狠狠色狠狠色综合系列| 久久国产精品色| 日韩精品免费专区| 天天操天天综合网| 午夜精品视频在线观看| 亚洲一区二区三区在线播放| 国产婷婷精品av在线| 久久免费看少妇高潮| 久久婷婷一区二区三区| 欧美在线不卡视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 欧美肥妇bbw| 3d动漫精品啪啪| 欧美一区二区三区色| 欧美日韩一区二区电影| 欧美色综合网站| 在线观看日韩国产| 在线观看一区不卡| 欧美美女一区二区| 欧美一二三四区在线| 欧美日韩国产成人在线91| 精品视频123区在线观看| 欧美精品乱人伦久久久久久| 在线综合+亚洲+欧美中文字幕| 欧美精品一二三四| 在线观看欧美黄色| 欧美日韩成人综合在线一区二区| 欧美精品久久一区二区三区| 在线精品视频一区二区三四| 色婷婷久久久亚洲一区二区三区| 欧美视频中文一区二区三区在线观看| 精品国产一区二区三区忘忧草 | 亚洲午夜三级在线| 日韩成人精品视频| 国内一区二区在线| 国产69精品久久777的优势| av亚洲精华国产精华精华| 91福利在线观看| 色综合天天做天天爱| 欧美日韩高清一区二区三区| 日韩亚洲欧美一区| 国产精品麻豆视频| 午夜精品久久久久久久久久久 | 精品亚洲成a人| 成人午夜看片网址| 欧美日韩精品欧美日韩精品一| 日韩视频一区二区在线观看| 国产欧美视频一区二区| 一区二区三区日本| 国产传媒欧美日韩成人| 在线观看日韩毛片| 久久久久久久综合色一本| 天堂在线一区二区| www.在线成人| 91精品国产综合久久精品麻豆| 国产精品久久久久久久久免费丝袜 | 欧美mv和日韩mv国产网站| 国产精品热久久久久夜色精品三区| 一区二区三区毛片| 成人美女视频在线观看18| 欧美一区二区精品久久911| 国产精品视频麻豆| 国产麻豆视频精品| 日韩免费成人网| 视频在线在亚洲| 欧美群妇大交群的观看方式| 自拍偷拍欧美精品| 国产福利一区在线| 精品国产1区2区3区| 日本va欧美va欧美va精品| 欧美日韩精品综合在线| 一区二区视频在线| 99久久精品免费| 亚洲欧洲三级电影| 成a人片国产精品| 中文无字幕一区二区三区| 国产一区二区三区精品视频| 欧美成人一区二区| 久久成人免费网| 精品99一区二区三区| 另类小说色综合网站| 欧美日韩成人综合天天影院| 亚洲综合小说图片| 欧美在线色视频| 午夜欧美在线一二页| 欧美日韩一本到| 日韩av二区在线播放| 欧美精品一二三区| 蜜桃视频第一区免费观看| 欧美一级午夜免费电影| 蜜臀av亚洲一区中文字幕| 日韩三级免费观看| 国产乱子轮精品视频| 欧美国产激情二区三区| 成人h动漫精品| 一区二区三区不卡视频| 欧美日韩国产首页| 久久精品国产亚洲一区二区三区| 欧美精品一区男女天堂| 国产不卡视频在线观看| 日韩毛片精品高清免费| 欧美在线影院一区二区| 日本不卡在线视频| 久久青草国产手机看片福利盒子| 国产精品一二三| 亚洲特黄一级片| 欧美日韩国产另类一区| 韩国成人在线视频| 1000部国产精品成人观看| 在线精品视频小说1| 免费观看在线色综合| 欧美激情一区在线| 欧美视频一区二区三区四区| 日本美女视频一区二区| 久久人人97超碰com| 91蜜桃婷婷狠狠久久综合9色| 性久久久久久久久久久久 | 亚洲精品日产精品乱码不卡| 色哟哟一区二区三区| 奇米影视一区二区三区| 中文字幕精品综合| 欧美在线高清视频| 国产美女视频一区| 一区二区三区成人| 久久丝袜美腿综合| 91国产免费看| 国产一区二区视频在线| 亚洲免费观看高清完整版在线| 91精品国产色综合久久不卡蜜臀 | 国产精品免费人成网站| 欧美日韩免费观看一区二区三区| 韩国在线一区二区| 亚洲精品日韩一| 久久久精品免费免费| 欧美日韩在线播放一区| 国产·精品毛片| 免费人成黄页网站在线一区二区| 国产精品久久三区| 欧美一级黄色片| 色偷偷久久人人79超碰人人澡| 国内精品不卡在线| 天天综合天天综合色| 国产精品久久久久一区| 日韩精品一区二区三区中文不卡 | 国产成人免费视频精品含羞草妖精| 亚洲一二三四在线观看| 欧美激情在线一区二区| 日韩三级电影网址| 欧美性大战久久久久久久| 国产成人在线影院 |