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

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

?? impiopcserver.cpp

?? 基于Intellution開發包的開發的OPC服務器
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//	ImpIOPCServer.cpp
//
//  This file contains the implementation of 
//  the IOPCServer interface for the XXX server.
//
//	(c) COPYRIGHT 1996-1998, INTELLUTION INC.
// ALL RIGHTS RESERVED
//
//
//	Functions defined in this module:
//
//			CImpIOPCServer::CImpIOPCServer()
//			CImpIOPCServer::~CImpIOPCServer()
//			CImpIOPCServer::AddRef()
//			CImpIOPCServer::Release()
//			CImpIOPCServer::QueryInterface()
//			CImpIOPCSyncIO::GetStatus()
//			CImpIOPCSyncIO::GetErrorString()
//			CImpIOPCServer::AddGroup()
//			CImpIOPCServer::GetGroupByName()
//			CImpIOPCServer::RemoveGroup()
//			CImpIOPCServer::CreateGroupEnumerator()
//
//
//
// Modification Log:
//	Vers	Date     By		Notes
//	----	-------- ---	-----
//	1.0		08/26/97 jra	Created
//	1.3		03/10/98 jra	Modified to be wizard generated and driver specific.
//
//

#define WIN32_LEAN_AND_MEAN

#include "OpcStdAfx.h"

#include <afxconv.h>	// used for ATL conversion functions

#include "OPC.h"
#include "OPCERROR.h"
#include "OPCVersionInfo.h"


/////////////////////////////////////////////////////////////////////////////
// External global variables
/////////////////////////////////////////////////////////////////////////////
extern	CString		g_strDefaultGeneratedGroupName;
extern	DWORD		g_dwWaitPeriod;
extern	TCHAR		g_tszAcronym[];


/////////////////////////////////////////////////////////////////////////////
// Vendor information
/////////////////////////////////////////////////////////////////////////////
static	WCHAR	g_pwcVendorInfo[100];


/////////////////////////////////////////////////////////////////////////////
// Constructor /Destructor functions
//

////////////////////////////////////////////////////////////////
// CImpIOPCServer()
//
// Constructor for this Interface
//
////////////////////////////////////////////////////////////////
CImpIOPCServer::CImpIOPCServer(LPUNKNOWN pUnkOuter)
{
	m_pUnkOuter		= pUnkOuter;
	m_pParentServer	= (COPCDrvServer *)pUnkOuter;

	// Format the vendor info string show the version of the server.
	//
	CString	szVendorInfo;
	WCHAR	*wcTemp;

	szVendorInfo.Format("%sOPC - Intellution Inc. OPC Server v%d.%d.%d",
		g_tszAcronym, MAJOR_VERSION, MINOR_VERSION, BUILD_NUMBER);

	USES_CONVERSION;

	wcTemp = A2W(szVendorInfo.GetBuffer(szVendorInfo.GetLength() + 1));
	wcscpy(g_pwcVendorInfo, wcTemp);
	szVendorInfo.ReleaseBuffer();
}



////////////////////////////////////////////////////////////////
// ~CImpIOPCServer()
//
// Destructor for this Interface
//
////////////////////////////////////////////////////////////////
CImpIOPCServer::~CImpIOPCServer(void)
{
	m_pParentServer->m_pCImpIOPCServer = NULL;
}


/////////////////////////////////////////////////////////////////////////////
// IUnknown functions Delegate to Parent, but also perform internal reference
// checking and cleanup.
//


////////////////////////////////////////////////////////////////
// AddRef()
//
////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CImpIOPCServer::AddRef(void)
{
	return m_pUnkOuter->AddRef();
}


////////////////////////////////////////////////////////////////
// Release()
//
////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CImpIOPCServer::Release(void)
{
	return m_pUnkOuter->Release(); 
}


////////////////////////////////////////////////////////////////
// QueryInterface()
//
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIOPCServer::QueryInterface(REFIID	iid, 
											LPVOID	*ppInterface)
{
	return m_pUnkOuter->QueryInterface(iid, ppInterface);
}



/////////////////////////////////////////////////////////////////////////////
// CImpIOPCServer (IOPCServer) interface functions
//


////////////////////////////////////////////////////////////////
// CImpIOPCServer::GetStatus()
//
// This function fills in the OPCSERVERSTATUS structure that 
// was passed in.
//
// Returns:
//	HRESULT	-	S_OK if the function succeeded.
//			-	E_FAIL if the function failed.
//
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIOPCServer::GetStatus(OPCSERVERSTATUS	**ppServerStatus)
{
	OPCSERVERSTATUS	*pServerStatus	= NULL;


	// Make sure that we got a good pointer
	//
	if (NULL == ppServerStatus)
	{
		return E_FAIL;
	}

	// Allocate some memory for the struct
	//
	pServerStatus = (OPCSERVERSTATUS *)pIMalloc->Alloc(sizeof(OPCSERVERSTATUS));
	if(NULL == pServerStatus)
	{
		*ppServerStatus = NULL;
		return E_FAIL;
	}

	// Get the vendor info
	//
	pServerStatus->szVendorInfo	= WSTRClone(g_pwcVendorInfo, pIMalloc);
	if (NULL == pServerStatus->szVendorInfo)
	{
		pIMalloc->Free(pServerStatus);
		*ppServerStatus = NULL;
		return E_FAIL;
	}

	// Get the start and update times
	//
	pServerStatus->ftStartTime = m_pParentServer->m_ftServerStartTime;
	pServerStatus->ftLastUpdateTime = m_pParentServer->m_ftLastUpdate;
	CoFileTimeNow(&pServerStatus->ftCurrentTime);

	// Get the general server state info
	//
	pServerStatus->dwServerState	= m_pParentServer->m_ServerState;
	pServerStatus->dwGroupCount		= m_pParentServer->GetNumGroupHandles();
	pServerStatus->dwBandWidth		= m_pParentServer->m_dwBandwidth;
		
	// Get the server build info
	//
	pServerStatus->wMajorVersion	= MAJOR_VERSION;
	pServerStatus->wMinorVersion	= MINOR_VERSION;
	pServerStatus->wBuildNumber		= BUILD_NUMBER;
	pServerStatus->wReserved		= 42;

	// return the result (if any) and the error
	//
	*ppServerStatus = pServerStatus;

	return S_OK;
}


////////////////////////////////////////////////////////////////
// CImpIOPCServer::GetErrorString()
//
// For server specific error codes we need to return a user 
// displayable string in the user's language. 
// The easiest way to do this is to put the strings in the RC 
// file and use LoadString.
//
// Currently, the LCID is ignored.
//
// Returns:
//	HRESULT	-	S_OK if the function succeeded
//			-	E_FAIL if the function failed.
//			-	E_OUTOFMEMORY if WSTRClone() failed.
//			-	E_INVALIDARG if we got a bad pointer.
//
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIOPCServer::GetErrorString(HRESULT		hr, 
											LCID		locale, 
											LPWSTR		*ppString)
{
	static WCHAR *pwcErrorString	= NULL;


	// Make sure we didn't get any bad parameters.
	//
	if (NULL == ppString)
	{
		return E_INVALIDARG;
	}

	switch(hr)
	{
	// Standard COM HRESULT values
	//
	case S_OK:
		pwcErrorString = L"Operation Successful";
		break;
	case E_INVALIDARG:
		pwcErrorString = L"The value of one or more parameters was not valid.";
		break;
	case E_OUTOFMEMORY:
		pwcErrorString = L"Not enough memory to complete the requested operation.";
		break;
	case E_FAIL:
		pwcErrorString = L"Error. Operation failed.";
		break;
	case E_NOINTERFACE:
		pwcErrorString = L"Interface not supported.";
		break;
	case E_POINTER:
		pwcErrorString = L"Invalid or NULL pointer.";
		break;
	case E_NOTIMPL:
		pwcErrorString = L"Operation not implemented.";
		break;
	// OPC specific HRESULT error values
	//
	case OPC_E_INVALIDITEMID:
		pwcErrorString = L"Item ID was invalid and not found.";
		break;
	case OPC_E_INVALIDHANDLE:
		pwcErrorString = L"The server handle is invalid.";
		break;
	case OPC_E_DUPLICATENAME:
		pwcErrorString = L"A group is already defined with that name.";
		break;
	case OPC_E_BADTYPE:
		pwcErrorString = L"Write operation failed due to a bad type.";
		break;
	case OPC_E_BADRIGHTS:
		pwcErrorString = L"The Items AccessRights do not allow the operation.";
		break;
	case OPC_E_INVALIDFILTER:
		pwcErrorString = L"The Filter string was not valid.";
		break;
	case OLE_E_NOCONNECTION:
		pwcErrorString = L"No previous connection.";
		break;
	case OPC_E_PUBLIC:
		pwcErrorString = L"The requested operation cannot be done on a public group.";
		break;
	case OPC_E_RANGE:
		pwcErrorString = L"The value passed to WRITE was out of range.";
		break;
	// OPC specific HRESULT success values
	//
	case OPC_S_UNSUPPORTEDRATE:
		pwcErrorString = L"The server does not support the requested data rate, but will use the closest available rate.";
		break;
	case OPC_S_CLAMP:
		pwcErrorString = L"The value passed to WRITE was accepted, but was clamped.";
		break;
	// Miscellaneous HRESULT return codes.
	//
	case CONNECT_E_ADVISELIMIT:
		pwcErrorString = L"Connection limit exceeded. Request cancelled.";
		break;
	case CONNECT_E_NOCONNECTION:
		pwcErrorString = L"Connection not established.";
		break;
	case CONNECT_E_CANNOTCONNECT:
		pwcErrorString = L"Cannot connect to interface.";
		break;
	case CLASS_E_NOAGGREGATION:
		pwcErrorString = L"Aggregation is not supported.";
		break;
	case CLASS_E_CLASSNOTAVAILABLE:
		pwcErrorString = L"Class not available.";
		break;
	case DV_E_FORMATETC:
		pwcErrorString = L"Bad stream format.";
		break;
	default:
		*ppString = NULL;
		return E_FAIL;
		break;
	}

	*ppString = WSTRClone(pwcErrorString, pIMalloc);
	if (NULL == *ppString)
	{
		return E_OUTOFMEMORY;
	}

	return S_OK;
}


////////////////////////////////////////////////////////////////
// CImpIOPCServer::AddGroup()
//
// This function creates a new group of the specified name on 
// this server.  
// Note TimeBias, Deadband and LCID are not implemented
//
// Returns:
//	HRESULT	-	S_OK if the function succeeded
//			-	E_FAIL if the function failed.
//			-	OPC_E_DUPLICATENAME if a group already contains
//				the name passed to us.
//			-	E_INVALIDARG if a parameter passed is invalid,
//				such as a bad pointer.
//			-	E_OUTOFMEMORY if a memory allocator failed.
//
////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产呦萝稀缺另类资源| 中文字幕av资源一区| 91麻豆精东视频| 国产成人亚洲综合a∨猫咪| 久久国产成人午夜av影院| 久久国内精品视频| 九九精品一区二区| 国产一区二区三区久久悠悠色av| 精品一区二区在线免费观看| 国产精品自拍一区| 高清视频一区二区| 97久久超碰国产精品电影| a亚洲天堂av| 色婷婷av一区二区三区大白胸| 91年精品国产| 欧美日精品一区视频| 欧美高清一级片在线| 欧美一区二区女人| 久久久蜜桃精品| 亚洲三级在线观看| 天天av天天翘天天综合网色鬼国产 | 理论片日本一区| 国产一区91精品张津瑜| 国产91色综合久久免费分享| www.一区二区| 欧美色网一区二区| 欧美成人vps| 亚洲欧美国产高清| 奇米色一区二区| av电影在线观看完整版一区二区| 日本福利一区二区| 日韩欧美在线网站| 国产精品久久久久久久久免费桃花 | 欧美国产日本视频| 一区二区欧美精品| 国产九色精品成人porny| 一本色道久久综合亚洲aⅴ蜜桃| 欧美剧在线免费观看网站| 久久久亚洲午夜电影| 一区二区三区欧美亚洲| 国产一区二区福利视频| 日本高清视频一区二区| 久久久久久一二三区| 香蕉成人伊视频在线观看| 高清国产一区二区| 欧美大片在线观看一区| 亚洲人成网站色在线观看| 激情五月激情综合网| 在线视频亚洲一区| 亚洲国产电影在线观看| 日韩电影一二三区| 欧美性一区二区| 国产精品视频线看| 国模一区二区三区白浆| 欧美日韩国产片| 亚洲精品国产精品乱码不99| 国产精品综合久久| 日韩女优视频免费观看| 午夜视频一区在线观看| av一区二区三区黑人| 欧美精品一区二| 理论电影国产精品| 91精品国产91综合久久蜜臀| 亚洲一区欧美一区| 在线看日韩精品电影| 亚洲三级在线看| 91小视频免费看| 中文久久乱码一区二区| 粉嫩绯色av一区二区在线观看| 26uuu久久综合| 久久99久久99| 日韩手机在线导航| 琪琪久久久久日韩精品| 欧美一区二区三区在线电影| 视频一区在线视频| 91精品免费观看| 男女激情视频一区| 精品免费日韩av| 国产在线精品一区二区三区不卡 | 国产一区二区福利视频| 日韩久久久久久| 久久精品国产精品青草| 欧美成va人片在线观看| 久久99热99| 国产三级精品视频| 成人激情动漫在线观看| 国产精品毛片久久久久久| 成人avav在线| 亚洲激情欧美激情| 8v天堂国产在线一区二区| 老汉av免费一区二区三区| 久久久三级国产网站| jlzzjlzz亚洲日本少妇| 亚洲一区二区三区激情| 欧美另类久久久品| 极品瑜伽女神91| 中文欧美字幕免费| 欧美日韩国产在线观看| 免费黄网站欧美| 欧美激情一区二区| 欧美色爱综合网| 国产精品一区在线观看你懂的| 国产精品美女久久久久久久 | 韩国三级在线一区| 国产亚洲精品福利| 91国模大尺度私拍在线视频| 免费高清成人在线| 1区2区3区国产精品| 欧美日韩一区在线| 丁香另类激情小说| 亚洲国产日韩在线一区模特| 亚洲精品在线一区二区| 色综合视频在线观看| 日本欧美肥老太交大片| 国产蜜臀97一区二区三区| 欧美日韩国产乱码电影| 成人不卡免费av| 免费人成在线不卡| 亚洲免费资源在线播放| 精品国产露脸精彩对白 | 91麻豆精品国产91久久久更新时间| 麻豆精品一区二区| 一片黄亚洲嫩模| 欧美激情一二三区| 欧美一级欧美三级在线观看 | 欧美日韩国产精品自在自线| 国产精品一色哟哟哟| 欧美a级一区二区| 一区二区三区蜜桃| 日本一二三四高清不卡| 日韩欧美一区二区不卡| 欧美日韩一二三区| 91在线视频免费观看| 国产成人自拍网| 精品在线观看视频| 日韩激情中文字幕| 亚洲综合成人在线视频| 中文字幕一区二区不卡 | 亚洲欧美一区二区三区极速播放 | 在线亚洲人成电影网站色www| 激情都市一区二区| 日本欧美一区二区三区乱码| 一区二区三区四区在线| 久久精品一区二区三区四区| 日韩视频一区在线观看| 这里只有精品免费| 欧美视频第二页| 欧美日韩一区二区在线观看视频| 成人精品视频一区二区三区尤物| 老汉av免费一区二区三区| 蜜臀99久久精品久久久久久软件| 午夜视频一区二区| 精品中文av资源站在线观看| 免费人成网站在线观看欧美高清| 亚洲第一成人在线| 亚洲国产精品欧美一二99| 亚洲综合偷拍欧美一区色| 亚洲精品福利视频网站| 亚洲色欲色欲www| 欧美激情一区二区三区| 国产精品美女久久久久久久 | 色狠狠桃花综合| 在线观看91精品国产入口| 欧美午夜一区二区三区| 8x8x8国产精品| 精品福利视频一区二区三区| 久久综合久久99| 国产精品天干天干在观线| 国产精品国产自产拍高清av| 亚洲伦理在线精品| 亚洲自拍另类综合| 免费不卡在线观看| 国产成人福利片| 成人精品视频一区二区三区尤物| 91在线观看污| 欧美日韩dvd在线观看| 日韩久久精品一区| 日韩毛片精品高清免费| 亚洲成a人片在线不卡一二三区 | 国产成人丝袜美腿| 91性感美女视频| 欧美一区二区三区系列电影| 精品国产伦一区二区三区观看方式| 久久精品视频在线看| 亚洲欧美另类在线| 狂野欧美性猛交blacked| 成人午夜伦理影院| 欧美性大战久久久久久久蜜臀| 7878成人国产在线观看| 日本一区二区三区四区| 性欧美大战久久久久久久久| 极品尤物av久久免费看| 在线免费视频一区二区| 亚洲精品在线网站| 亚洲一区精品在线| 成人精品国产免费网站| 91精品欧美综合在线观看最新| 中文字幕在线观看一区二区| 蜜臀精品一区二区三区在线观看 | 亚洲色图欧美激情|