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

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

?? impienumunknown.cpp

?? 基于Intellution開(kāi)發(fā)包的開(kāi)發(fā)的OPC服務(wù)器
?? CPP
字號(hào):
// ImpIEnumUnknown.cpp
//
//  This file contains an implementation of an IEnumUnknown interface.
//  Note this is a fully 'generic' enumerator implementation.
//
//  Since the list of elements is buffered in the object
//  It is appropriate for enumerations with a 'reasonable' number of elements
//
//  There is no OPC or Server specific code here.
//
// See IEnumXXXX::Next in Win32SDK\OLE\Reference\Interfaces\IEnumXXXX
// for general guidelines for enumerators
//
//
//	(c) COPYRIGHT 1996-1998, INTELLUTION INC.
// ALL RIGHTS RESERVED
//
//
//	Functions defined in this module:
//
//			CImpIEnumUnknown::CImpIEnumUnknown()
//			CImpIEnumUnknown::~CImpIEnumUnknown()
//			CImpIEnumUnknown::AddRef()
//			CImpIEnumUnknown::Release()
//			CImpIEnumUnknown::QueryInterface()
//			CImpIEnumUnknown::Next()
//			CImpIEnumUnknown::Skip()
//			CImpIEnumUnknown::Reset()
//			CImpIEnumUnknown::Clone()
//
//
//
// Modification Log:
//	Vers	Date     By		Notes
//	----	-------- ---	-----
//	1.00	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 "OPC.h"


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::CImpIEnumUnknown)_
//
// Constructor
//
// Parameters:
//  pUnkRef   - LPUNKNOWN to use for reference counting (the 'parent').
//  cUnk      - ULONG number of LPUNKNOWNs in prgUnk
//  prgUnk    - LPUNKNOWN to the array to enumerate (we will make a 
//              local copy).
//
////////////////////////////////////////////////////////////////
CImpIEnumUnknown::CImpIEnumUnknown(LPUNKNOWN		pUnkOuter, 
								   ULONG			lCount, 
								   LPUNKNOWN		*pUnkList, 
								   IMalloc			*pIMalloc)
{
	m_lRefCount		= 0;
	m_pUnkOuter		= pUnkOuter;
	m_lCurrentElem	= 0;
	m_lNumUnks		= lCount;
	m_pUnkList		= new LPUNKNOWN[(UINT)lCount];
	m_pIMalloc		= pIMalloc;

	if (NULL != m_pUnkList)
	{
		for (UINT i = 0; i < lCount; i++)
		{
			// Create a local copy of the IUnknown List
			// And AddRef to insure the objects are not deleted 
			// while the ENUM is using them!
			//
			m_pUnkList[i] = pUnkList[i];
			m_pUnkList[i]->AddRef();	
		}
	}

	return;
}


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::~CImpIEnumUnknown
//
// Destructor
//
////////////////////////////////////////////////////////////////
CImpIEnumUnknown::~CImpIEnumUnknown(void)
{
	unsigned int	i;


	if (NULL != m_pUnkList)
	{
		for (i = 0; i < m_lNumUnks; i++)
		{
			// Release each object since this ENUM is done with it
			// 
			m_pUnkList[i]->Release();	
		}
		delete [] m_pUnkList;
	}
	return;
}



////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::QueryInterface()
//
// Purpose:
//  IUnknown members for CImpIEnumUnknown object.
//
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIEnumUnknown::QueryInterface(REFIID		riid, 
											  LPVOID		*ppv)
{
	*ppv = NULL;

	// Enumerators are separate objects with their own
	// QueryInterface behavior.
	//
	if (IID_IUnknown == riid || IID_IEnumUnknown == riid)
	{
		*ppv = (LPVOID)this;
	}

	if (NULL != *ppv)
	{
		((LPUNKNOWN)*ppv)->AddRef();
		return S_OK;
	}

	return E_NOINTERFACE;
}


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::Release()
//
// Purpose:
//  IUnknown members for CImpIEnumUnknown object.
//
////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CImpIEnumUnknown::AddRef(void)
{
	// Addref this object and also the 'parent' if any
	//
	InterlockedIncrement(&m_lRefCount);
	if(m_pUnkOuter != NULL) 
	{
		m_pUnkOuter->AddRef();
	}
	return m_lRefCount;
}


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::Release()
//
// Purpose:
//  IUnknown members for CImpIEnumUnknown object.
//
////////////////////////////////////////////////////////////////
STDMETHODIMP_(ULONG) CImpIEnumUnknown::Release(void)
{
	// Release this object and also the 'parent' if any
	//
	if(m_pUnkOuter != NULL) 
	{
		m_pUnkOuter->Release();
	}

	if (0L != InterlockedDecrement(&m_lRefCount))
	{
		return m_lRefCount;
	}

	delete this;
	return 0;
}


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::Next()
//
// Purpose:
//  Returns the next element in the enumeration.
//
// Parameters:
//  cRequested  - ULONG max number of LPUNKNOWNs to return.
//  ppUnk       - LPUNKNOWN * in which to store the returned
//				  pointer.
//  pActual     - ULONG * in which to return how many we actually
//                enumerated.
//
// Return Value:
//  HRESULT     - S_OK if successful, S_FALSE otherwise,
//
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIEnumUnknown::Next(ULONG			cRequested, 
									IUnknown		**ppUnk, 
									ULONG			*pActual)
{
	ULONG		cReturn	 = 0L,
				maxcount = cRequested;


	*pActual = 0L;		// default
	*ppUnk = NULL;		// default

	// If this enumerator is empty - return FALSE
	//
	if (NULL == m_pUnkList)
	{
		return S_FALSE;
	}

	// If user passed null for count of items returned
	// Then he is only allowed to ask for 1 item
	//
	if (NULL == pActual)	
	{
		if (1L != cRequested)
		{
			return E_POINTER;
		}
	}

	// If we are at end of list return FALSE
	//
	if (m_lCurrentElem >= m_lNumUnks)
	{
		return S_FALSE;
	}

	// Return as many as we have left in list up to request count
	//
	while (m_lCurrentElem < m_lNumUnks && cRequested > 0)
	{
		ppUnk[cReturn] = m_pUnkList[m_lCurrentElem];

		if (NULL != ppUnk[cReturn])	// (should never be null)
		{
			ppUnk[cReturn]->AddRef();
		}

		// And move on to the next one
		//
		m_lCurrentElem++;
		cReturn++;
		cRequested--;
	}

	if (NULL != pActual)
	{
		*pActual = cReturn;
	}

	if (cReturn == maxcount)
	{
		return S_OK;
	}
	return S_FALSE;
}


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::Skip()
//
// Purpose:
//  Skips the next n elements in the enumeration.
//
// Parameters:
//  lNumSkip	ULONG number of elements to skip.
//
// Return Value:
//  HRESULT	-	S_OK if successful, S_FALSE if we could not 
//				skip the requested number.
//
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIEnumUnknown::Skip(ULONG lNumSkip)
{
	if (((m_lCurrentElem + lNumSkip) >= m_lNumUnks) || NULL == m_pUnkList)
	{
		return S_FALSE;
	}

	m_lCurrentElem += lNumSkip;
	return S_OK;
}


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::Reset()
//
// Purpose:
//  Resets the current element index in the enumeration to zero.
//
// Parameters:
//  None
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIEnumUnknown::Reset(void)
{
	m_lCurrentElem = 0;
	return S_OK;
}


////////////////////////////////////////////////////////////////
// CImpIEnumUnknown::Clone()
//
// Purpose:
//  Returns another IEnumUnknown with the same state as ourselves.
//
// Parameters:
//  ppEnum		  LPENUMUNKNOWN * in which to return the
//				  new object.
//
////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIEnumUnknown::Clone(LPENUMUNKNOWN *ppEnum)
{
	CImpIEnumUnknown   *pNew;


	*ppEnum = NULL;

	//Create the clone
	//
	pNew = new CImpIEnumUnknown(m_pUnkOuter, m_lNumUnks, m_pUnkList, m_pIMalloc);

	if (NULL == pNew)
	{
		return E_OUTOFMEMORY;
	}

	pNew->AddRef();

	// Set the 'state' of the clone to match the state if this
	//
	pNew->m_lCurrentElem = m_lCurrentElem;

	*ppEnum=pNew;
	return S_OK;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区不卡视频| 国产亚洲一二三区| 97久久超碰精品国产| 国产高清精品网站| 国产精品自拍一区| 国产一区二区电影| 国产精品中文字幕一区二区三区| 久88久久88久久久| 国产在线国偷精品产拍免费yy| 国产在线播精品第三| 国产91精品欧美| 91影视在线播放| 色综合激情五月| 欧美日韩一区中文字幕| 欧美一区二区精品| 欧美大片一区二区三区| 久久免费精品国产久精品久久久久| 成人久久18免费网站麻豆| 91免费观看视频| 色综合久久久久久久久| 91黄色免费版| 欧美一区二区三区公司| 日韩免费电影一区| 久久久精品国产免费观看同学| 国产欧美一区视频| 亚洲欧美日韩在线不卡| 亚洲国产日韩一级| 裸体一区二区三区| 国产黑丝在线一区二区三区| 91女厕偷拍女厕偷拍高清| 欧美影视一区在线| 日韩视频在线你懂得| 久久久久久久久久美女| 亚洲欧美综合另类在线卡通| 亚洲一区二区av在线| 久久精品久久久精品美女| 成人黄色a**站在线观看| 欧美在线观看18| 日韩精品一区二区在线| 亚洲国产成人在线| 亚洲成人av一区二区| 九色综合狠狠综合久久| 色哟哟国产精品免费观看| 国产成人在线看| voyeur盗摄精品| 欧美视频一区二区三区四区| 欧美精品一区二区三区很污很色的| 国产精品久久久久影院亚瑟| 五月天一区二区三区| 国产成人亚洲综合a∨猫咪| 色乱码一区二区三区88| 欧美成va人片在线观看| 亚洲欧美日韩国产成人精品影院| 日本中文字幕一区二区视频| 国产精品影视天天线| 欧美熟乱第一页| 久久精品亚洲精品国产欧美kt∨ | 欧美日韩国产免费| 日韩精品一区二区三区四区视频 | 国产精品国产三级国产普通话99| 亚洲一二三四在线| 丁香激情综合国产| 欧美一区二区在线视频| 亚洲欧洲成人自拍| 国产精品自在欧美一区| 欧美精三区欧美精三区| 亚洲欧洲av在线| 国内精品第一页| 欧美喷潮久久久xxxxx| 中文字幕一区二区日韩精品绯色| 麻豆成人久久精品二区三区红 | 蜜桃免费网站一区二区三区| 91丨porny丨最新| 精品va天堂亚洲国产| 午夜精品免费在线观看| 91视频观看视频| 日本一区二区三区电影| 久久成人麻豆午夜电影| 欧美日韩国产一级二级| 亚洲男人电影天堂| 9久草视频在线视频精品| 久久先锋影音av| 日韩国产在线一| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产成人欧美日韩在线电影| 日韩亚洲欧美在线观看| 亚洲成av人片一区二区三区| 色综合夜色一区| 亚洲视频狠狠干| 成人av电影在线播放| 日本一区二区三区视频视频| 国产精品亚洲综合一区在线观看| 3d动漫精品啪啪1区2区免费| 午夜视频在线观看一区二区三区| 欧美综合天天夜夜久久| 一区二区三区四区视频精品免费| av在线一区二区三区| 国产精品久久久久久福利一牛影视 | 美女视频黄 久久| 91麻豆精品91久久久久同性| 亚洲综合在线第一页| 欧亚一区二区三区| 亚洲成人在线免费| 在线播放日韩导航| 偷拍一区二区三区四区| 91精品国产综合久久精品| 午夜精品免费在线观看| 日韩一区二区三区四区| 久草中文综合在线| www激情久久| 丁香天五香天堂综合| 中文字幕高清不卡| 99re成人在线| 亚洲国产cao| 日韩一区二区在线免费观看| 麻豆精品视频在线观看视频| 久久亚洲影视婷婷| 国产成人亚洲综合a∨猫咪 | 国产99久久久国产精品潘金| 国产欧美日韩不卡| 91最新地址在线播放| 一级日本不卡的影视| 91精品视频网| 韩国精品一区二区| 国产精品每日更新在线播放网址 | 久久精品视频一区二区三区| 成人国产精品免费网站| 一区二区三区欧美| 欧美高清一级片在线| 久久精品国产99国产精品| 日本一区二区三区高清不卡| 一本色道久久综合亚洲91| 日精品一区二区三区| 2017欧美狠狠色| 99久久久无码国产精品| 亚洲成人动漫av| 久久精品视频网| 欧洲一区在线电影| 韩国精品主播一区二区在线观看 | 91精品国产综合久久久久| 激情综合五月婷婷| 亚洲天堂网中文字| 日韩亚洲欧美一区二区三区| 成人高清视频免费观看| 午夜欧美一区二区三区在线播放| 久久久精品国产免大香伊| 在线免费观看日本一区| 久久精品国产亚洲高清剧情介绍| 亚洲国产精品传媒在线观看| 欧美美女一区二区| 丁香天五香天堂综合| 视频一区二区不卡| 国产精品三级在线观看| 91精品在线免费观看| 粉嫩av亚洲一区二区图片| 三级一区在线视频先锋| 中文字幕+乱码+中文字幕一区| 欧美日韩精品免费观看视频| 国产sm精品调教视频网站| 天天色综合天天| 亚洲欧美一区二区三区孕妇| 精品精品国产高清一毛片一天堂| 91精品办公室少妇高潮对白| 国产乱人伦偷精品视频不卡| 偷拍与自拍一区| 亚洲色图欧美激情| 久久久高清一区二区三区| 欧美日韩国产首页在线观看| 不卡高清视频专区| 激情文学综合丁香| 亚洲成年人影院| 亚洲日本电影在线| 久久午夜色播影院免费高清 | 亚洲综合清纯丝袜自拍| 国产亚洲人成网站| 欧美一激情一区二区三区| 色综合久久久久久久| 国产不卡免费视频| 激情久久久久久久久久久久久久久久| 亚洲一区二区三区自拍| 中文字幕中文字幕一区| 久久久国产精华| 欧美成人伊人久久综合网| 欧美日韩一级二级| 91成人看片片| 99精品视频在线播放观看| 国产不卡视频在线播放| 国内不卡的二区三区中文字幕| 日韩中文字幕不卡| 亚洲成人av在线电影| 亚洲一区中文日韩| 日韩理论在线观看| 国产精品麻豆欧美日韩ww| 久久女同性恋中文字幕| 精品少妇一区二区三区日产乱码 | 欧美日韩不卡一区| 在线观看日韩毛片| 在线免费观看日韩欧美| 在线观看国产日韩| 欧美最猛性xxxxx直播|