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

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

?? opcdrv.h

?? 基于Intellution開發包的開發的OPC服務器
?? H
?? 第 1 頁 / 共 2 頁
字號:
	void				GetNextItem(
		POSITION				&ItemPosition, 
		OPCHANDLE				&hItem, 
		COPCDrvItem				*&pItem
		);										// Returns the next Item in the 
												// group relative to POSITION

	HRESULT				FreeAllItems(
		void
		);										// free all of the items in the group


	// Read/write and update functions
	void				GroupProcess(
		DWORD					dwTics
		);

	void				AsyncProcess(
		void
		);
	
	void				UpdateDataCache(
		void
		);

	void				CheckDataObjectOnDataTimeChange(
		void
		);
	
	void				CheckDataObjectOnDataChange(
		void
		);

	void				CheckDataObjectAsyncRead(
		void
		);
	
	void				CheckDataObjectAsyncWrite(
		void
		);
	
	void				SendStreamWithTime(
		int						nCount, 
		OPCHANDLE				*pItemHandleList, 
		DWORD					dwSize, 
		WORD					wMask, 
		DWORD					dwTid,
		OPCDATASOURCE			dwSource = OPC_DS_DEVICE
		);
	
	void				SendStream(
		int						nCount, 
		OPCHANDLE				*pItemHandleList, 
		DWORD					dwSize, 
		WORD					wMask, 
		DWORD					dwTid,
		OPCDATASOURCE			dwSource = OPC_DS_DEVICE
		);
	
	void				SendWriteStream(
		int						nCount, 
		OPCHANDLE				*pItemHandleList, 
		DWORD					dwTid
		);
	
	long				ComputeSize(
		int						nCount, 
		OPCHANDLE				*pItemHandleList
		);

	// for thread safety (just in case)
	//
	void		Lock  (void) { EnterCriticalSection(&this->m_Lock); }
	void		UnLock(void) { LeaveCriticalSection(&this->m_Lock); }


private:
	// Member Variables
	//
    long						m_lRefCount;		// Internal reference count
	LPUNKNOWN					m_pUnkOuter;		// Pointer to controlling IUnknown
	COPCDrvServer				*m_pParentServer;	// Pointer to parent server
	DWORD						m_dwRevisedRate;	// refresh rate
	FLOAT						m_Deadband;			// Percent deadband
	DWORD						m_LCID;
	LONG						m_TimeBias;
	BOOL						m_bActive;			// Status of this group
	WCHAR						*m_szName;
	OPCHANDLE					m_ServerGroupHandle;
	OPCHANDLE					m_ClientGroupHandle;

	CImpIOPCGroupStateMgt		*m_pCImpIGroupMgt;	// Group State Mgt
	CImpIOPCSyncIO				*m_pCImpISyncIO;	// Sync IO
	CImpIOPCAsyncIO				*m_pCImpIAsyncIO;	// Async IO
	CImpIOPCItemMgt				*m_pCImpIItemMgt;	// Item Mgt
	CImpIDataObject				*m_pCImpIDataObject;// Data Object

	// For managing update rate
	//
	long						m_lUpdateTime;

	// Used to keep track of the Items in this group
	DWORD						m_dwNumItems;

	DWORD						m_dwAdvfDataFlags,
								m_dwAdvfDataTimeFlags;

	// for thread safety (just in case)
	//
	CRITICAL_SECTION			m_Lock;

	// List of Items
	//
	CMap<OPCHANDLE, OPCHANDLE, COPCDrvItem*, COPCDrvItem*&> m_mapItem;

	// Marshalled AdviseSink interface pointers
	//
	IAdviseSink*				m_pdatatimeSink;
	IAdviseSink*				m_pdataSink;
	IAdviseSink*				m_pwriteSink;

public:
	// Async queues
	//
	CObList						m_AsyncWriteQueue;
	CObList						m_AsyncReadQueue;
};


/////////////////////////////////////////////////////////////////////////////
// COPCDrvItem object
//
// This class is an implementation of a specific Item Class.
// This implementation does NOT represent a required OPC object or interface.
// It is used to simplify the storing and updating of data. We derive both
// from IUnknown and CObject
//
/////////////////////////////////////////////////////////////////////////////
class COPCDrvItem :		public IUnknown,
						public CObject
{
	friend class COPCDrvServer;
	friend class COPCDrvGroup;
	friend class CImpIOPCSyncIO;
	friend class CImpIOPCAsyncIO;
	friend class CImpIDataObject;
  

public:
	COPCDrvItem(COPCDrvGroup *ParentGroup);
	~COPCDrvItem(void);

	// the IUnknown Functions
	STDMETHODIMP         QueryInterface(
		REFIID				iid, 
		LPVOID				*ppInterface
		);
	
	STDMETHODIMP_(ULONG) AddRef(
		void
		);
	
	STDMETHODIMP_(ULONG) Release(
		void
		);

	// Operator overloads
	COPCDrvItem &		operator=(
		const COPCDrvItem	&OtherItem
		);

	// Member Utility Functions (Note these are NOT an OPC required interface!)
	HRESULT				Init(
		int					j, 
		OPCITEMDEF			*ItemDef, 
		OPCITEMRESULT		*ItemRes
		);
	
	void				SetActive(
		BOOL				bActive
		);
	
	BOOL				GetActive(void)
		{ return this->m_bActive; }		// Returns the active state of the item
	
	void				SetHandle(
		OPCHANDLE			hClient
		);
	
	OPCHANDLE			GetHandle(
		void
		);
	
	HRESULT				SetDatatype(
		VARTYPE				vtNewType,
		BOOL				bInit = FALSE
		);
	
	VARTYPE				GetDatatype(
		void
		);
	
	COPCDrvItem	*		Clone(
		COPCDrvGroup		*newparent
		);
	
	void				IAGet(
		OPCITEMATTRIBUTES	*pIA
		);
	
	HRESULT				GetValue(
		OPCDATASOURCE		ds, 
		VARIANT				*vReadData, 
		WORD				*w, 
		FILETIME			*ftLastRead
		);
	
	HRESULT				WriteValue(
		VARIANT				*vWriteData
		);
	
	void				UpdateDataCache(
		void
		);

	void				ReadValue(
		void
		);
	
	BOOL				CheckDeviceRead(
		HRESULT				*hr
		);
	
	BOOL				CheckDeviceWrite(
		HRESULT				*hr
		);
	
	void				MarkAsChanged(
		WORD				wFlag
		);
	
	void				ClearChanged(
		WORD				wFlag
		);
	
	BOOL				Changed(
		WORD				wFlag
		);

	int					GetDataSize(
		void
		);

	void		Lock  (void) { EnterCriticalSection(&this->m_Lock); }
	void		UnLock(void) { LeaveCriticalSection(&this->m_Lock); }

public:
	//
	// Public members
	//

	// DMACS specific structures
	IODNAME			m_IodName;
	IOREC			m_IoRec;
	IOREC2			m_IoRec2;
	IOVSPEC			m_IovSpec;
	
	AEGUREC			m_AEguRec;
	DEGUREC			m_DEguRec;
	EGUREC			m_EguRec;

	IOSTAT			m_IoStat;

private:
	// Member Variables
	long			m_lRefCount;
	COPCDrvGroup	*m_pParentGroup;		// The group that owns this item

	OPCHANDLE		m_hServerItemHandle;	// Item generated handle used internally
	OPCHANDLE		m_hClientItemHandle;	// Client's handle

	VARTYPE			m_vtCanonical;			// Canonical data type (returned by driver)
	WCHAR			*m_szItemID;			// Item ID (ex "ITK:D1:5|LIN,0,100,Unsigned")
	WCHAR			*m_szAccessPath;		// Access path (not used)
	VARTYPE			m_vtRequested;			// Requested data type
	BOOL			m_bActive;

	VARIANT			m_vReturnedData;		// Data read from NIO
	WORD			m_wQuality;				// Data quality for this item
	FILETIME		m_ftLastWriteTime,		// used for last write
					m_ftLastReadTime;		// used for last read

	WORD			m_AsyncMask;			// bit mask used by Async operations V2.0

	WORD			m_wNumElements;			// Number of elements to read (used mainly
											// for ASCII strings, VT_BSTR)

	BOOL			m_bLastKnown;			// Flag to indicate if we have a last known 
											// value
	char			*m_pTempBuff;			// Temporary buffer used for string writes

	// Private utility functions
	BOOL				DidDataChange(
		VARIANT				&vNewData,
		WORD				wOldQuality,
		short				nOldIoStatus
		);									// Used to determine if the data has changed
											// for asynchronous reads

	HRESULT				ParseItemIDOptions(
		CString				strItemID,		// signal conditioning portion of ItemID
		CString&			strSigCond,		// returned signal conditioning
		CString&			strLoEGU,		// returned Lo EGU
		CString&			strHiEGU,		// returned Hi EGU
		CString&			strHWOptions	// returned Hardware Options
		);

	short				GetNIOBlockType(
		VARTYPE				vtRequestedDataType
		);									// Saves the NIO block type dependant on
											// the requested datatype

	// for thread safety (just in case)
	CRITICAL_SECTION	m_Lock;
};


/////////////////////////////////////////////////////////////////////////////
// Implementation of an IEnumString Interface for the Server
//
/////////////////////////////////////////////////////////////////////////////
class CImpIEnumString : public IEnumString
{

public:
	CImpIEnumString(LPUNKNOWN, ULONG, LPOLESTR*, IMalloc*);
	~CImpIEnumString(void);

	// the IUnknown Functions
	STDMETHODIMP			QueryInterface(
		REFIID					iid, 
		LPVOID					*ppInterface
		);

	STDMETHODIMP_(ULONG)	AddRef(
		void
		);
	
	STDMETHODIMP_(ULONG)	Release(
		void
		);

	// the IEnumString Functions
	STDMETHODIMP			Next (
		ULONG					Celt,
		LPOLESTR				*pRgelt,
		ULONG					*pCeltFetched
		);
        
	STDMETHODIMP			Skip (
		ULONG					celt
		);
        
	STDMETHODIMP			Reset(
		void
		);
        
	STDMETHODIMP			Clone(
		IEnumString				**ppenum
		);


private:
	// Member Variables
	long					m_lRefCount;		// Object reference count
	LPUNKNOWN				m_pUnkRef;			// IUnknown for ref counting
	ULONG					m_lCurrentElement;	// Current element
	ULONG					m_lNumStrings;		// Number of strings in us
	LPOLESTR				*m_lpOLEStrings;	// copy of the strings
	IMalloc					*m_pIMalloc;		// memory allocator to use
};


/////////////////////////////////////////////////////////////////////////////
//
// Used to manage asyncronous reads, writes and refreshes.
//
/////////////////////////////////////////////////////////////////////////////
class COPCDrvAsyncTrans : public CObject
{
public:
	COPCDrvAsyncTrans(
		COPCDrvGroup	*pParent
		);

	~COPCDrvAsyncTrans(
		);

	// Initialize the transaction
	//
	HRESULT				Init(
		DWORD				dwTransType,
		OPCDATASOURCE		dwReadType,
		DWORD				dwNumHandles,
		OPCHANDLE			*pHandles,
		VARIANT				*pvData = NULL
		);

	// Add the transaction to the parent group's queue
	//
	HRESULT				AddToQueue(
		void
		);

	// Remove the transaction from the parent group's queue
	//
	HRESULT				RemoveFromQueue(
		BOOL				bDelete = FALSE
		);

	// Return the transaction ID
	//
	DWORD				GetTransactionID(
		void
		)	{ return m_dwTransactionID; }

	// Return a pointer to the handle list
	//
	OPCHANDLE *			GetHandleList(
		void
		)	{ return m_pHandleList; }

	// Return a pointer to the data list
	//
	VARIANT	*			GetDataList(
		void
		)	{ return m_pvWriteData; }

	// Return the number of handles
	//
	DWORD				GetNumHandles(
		void
		)	{ return m_dwNumHandles; }

	// Return info about the transaction
	//
	HRESULT				GetListInfo(
		DWORD				*dwNum,
		OPCHANDLE			**ppdwList,
		VARIANT				**ppvList = NULL
		)	{ *dwNum = m_dwNumHandles; *ppdwList = m_pHandleList;
			  if (ppvList) *ppvList = m_pvWriteData; return S_OK; }

	// Cancel the pending transaction
	//
	HRESULT				Cancel(
		void
		)	{ return RemoveFromQueue(TRUE); }

private:
	COPCDrvGroup	*m_pParentGroup;
	POSITION		m_PosInList;
	DWORD			m_dwTransactionID;
	DWORD			m_dwNumHandles;
	OPCHANDLE		*m_pHandleList;
	VARIANT			*m_pvWriteData;

public:
	// Public properties. These shouldn't be set directly!!
	//
	DWORD			m_dwTransType;
	OPCDATASOURCE	m_dwReadType;
};


#endif	// OPCDrv__H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
337p日本欧洲亚洲大胆色噜噜| 懂色av一区二区三区蜜臀| 在线亚洲一区二区| 亚洲激情六月丁香| 日本久久一区二区三区| 一区二区三区四区不卡在线| 色婷婷精品大在线视频 | 日韩欧美色综合| 麻豆精品新av中文字幕| 久久这里只有精品首页| 成人午夜免费电影| 综合在线观看色| 欧洲视频一区二区| 另类成人小视频在线| 国产亚洲欧美中文| 97se狠狠狠综合亚洲狠狠| 亚洲与欧洲av电影| 精品少妇一区二区| 不卡视频一二三四| 一区二区三区电影在线播| 91精品欧美一区二区三区综合在 | 欧美一区二区三区视频在线| 男人的j进女人的j一区| 国产精品久久久久久久蜜臀| 欧美午夜精品一区二区三区| 激情综合色播五月| 伊人性伊人情综合网| 欧美一区二区大片| 99久久99久久综合| 日韩av一二三| 国产精品妹子av| 欧美人与z0zoxxxx视频| 国产成人综合在线| 午夜激情久久久| 久久久亚洲精品一区二区三区| 色综合网色综合| 国产中文一区二区三区| 亚洲综合久久av| 久久久99精品免费观看不卡| 欧美亚洲一区二区三区四区| 国产麻豆一精品一av一免费| 一区av在线播放| 久久久噜噜噜久久中文字幕色伊伊 | 欧美一级xxx| 91欧美一区二区| 韩国av一区二区| 亚洲成a人v欧美综合天堂| 国产精品网友自拍| 日韩欧美久久一区| 欧美性生活影院| 大桥未久av一区二区三区中文| 日本欧美一区二区三区乱码| 亚洲情趣在线观看| 国产日本一区二区| 精品欧美乱码久久久久久| 欧美日韩亚州综合| 色综合久久久久久久久久久| 国产精品亚洲一区二区三区妖精| 图片区小说区国产精品视频| 亚洲三级在线免费观看| 国产人妖乱国产精品人妖| 日韩三级视频在线观看| 欧美视频一区在线| 91免费观看视频在线| 成人亚洲一区二区一| 韩国欧美一区二区| 久99久精品视频免费观看| 五月婷婷综合在线| 亚洲一区二区三区美女| 亚洲另类春色国产| 亚洲欧美日韩中文字幕一区二区三区| 久久久久久**毛片大全| www日韩大片| 久久午夜色播影院免费高清| 日韩久久精品一区| 日韩丝袜情趣美女图片| 欧美一区二区免费| 日韩一区二区三区在线| 日韩欧美在线一区二区三区| 91精品国产免费| 制服丝袜激情欧洲亚洲| 日韩视频一区二区在线观看| 在线综合+亚洲+欧美中文字幕| 欧美性大战xxxxx久久久| 欧美日韩一区久久| 欧美乱熟臀69xxxxxx| 欧美日韩成人激情| 91精品国产欧美一区二区成人| 在线电影一区二区三区| 欧美一级久久久久久久大片| 精品国产一区二区三区av性色| 精品国产乱码91久久久久久网站| 久久女同互慰一区二区三区| 国产欧美久久久精品影院| 日本一区二区成人| 亚洲欧美日韩国产一区二区三区| 亚洲黄色尤物视频| 日韩二区在线观看| 精品一区二区三区免费| 国产成人综合亚洲网站| 99re亚洲国产精品| 欧美日韩和欧美的一区二区| 日韩一区二区三区免费看| 日韩欧美一二三| 国产日韩精品一区二区浪潮av | 美女任你摸久久| 国产91精品免费| 在线亚洲一区二区| 欧美成人一区二区三区片免费| 国产午夜精品美女毛片视频| 亚洲精品成a人| 蜜臀av一区二区| 99re视频这里只有精品| 91麻豆精品久久久久蜜臀| 国产亚洲欧美日韩俺去了| 一色屋精品亚洲香蕉网站| 亚洲不卡一区二区三区| 国产精品一区二区久久不卡| 在线观看视频91| 久久亚洲影视婷婷| 亚洲最大成人网4388xx| 精品亚洲porn| 91麻豆123| 精品成人一区二区三区| 一区二区三区四区蜜桃| 国产一区二区三区香蕉| 欧美日韩一本到| 国产精品久久久久7777按摩 | 欧美大度的电影原声| ...av二区三区久久精品| 日韩**一区毛片| 波多野结衣精品在线| 欧美一区二区三区在线| 亚洲精品乱码久久久久| 国产美女精品在线| 8x8x8国产精品| 亚洲人成网站色在线观看| 久久成人免费网| 欧美日韩一区二区不卡| 亚洲欧洲av一区二区三区久久| 免费欧美日韩国产三级电影| 色综合天天综合网国产成人综合天 | 91精品国产欧美日韩| 一区二区三区小说| 成人黄色小视频在线观看| 精品久久久久久综合日本欧美| 亚洲电影在线免费观看| 成人免费高清在线| 久久伊99综合婷婷久久伊| 日本亚洲电影天堂| 欧美三级欧美一级| 亚洲欧洲综合另类| 成人av电影在线| 欧美国产日韩在线观看| 国产成人综合在线| 久久精品亚洲精品国产欧美| 美女尤物国产一区| 日韩一区二区三区视频在线 | 99国产麻豆精品| 国产精品国产自产拍高清av| 国产一区二区伦理| 欧美电视剧免费观看| 美日韩一区二区三区| 欧美精品xxxxbbbb| 亚洲观看高清完整版在线观看| 色香蕉久久蜜桃| 亚洲精品久久久久久国产精华液| av激情亚洲男人天堂| 国产精品欧美一级免费| 大美女一区二区三区| 国产亚洲成年网址在线观看| 国产主播一区二区| 国产女主播一区| 国产河南妇女毛片精品久久久| 久久久久久久久久久99999| 韩国在线一区二区| 欧美国产综合色视频| 99久久精品一区| 亚洲网友自拍偷拍| 欧美女孩性生活视频| 日韩av网站免费在线| 精品国产伦一区二区三区免费 | 一区二区三区欧美视频| 在线观看不卡一区| 午夜影院久久久| 日韩精品中文字幕在线不卡尤物| 久久超碰97中文字幕| 国产视频一区二区在线| 成人18精品视频| 一区二区三区在线播放| 欧美一区二区三区在线视频| 韩国成人福利片在线播放| 中文字幕视频一区二区三区久| 色妞www精品视频| 日韩av在线免费观看不卡| 久久精品视频免费| 日本韩国欧美一区| 美女诱惑一区二区| 国产精品久久久久久久裸模| 欧美日韩精品三区|