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

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

?? opcdrv.h

?? 基于Intellution開發包的開發的OPC服務器
?? H
?? 第 1 頁 / 共 2 頁
字號:
// OPCDrv.h
//
// This file contains OBJECT definitions to the OPC server 
// for the XXXOPC.DLL.
// (The OPC.H file contains common interface base classes that
//  each object derives from)
//
//
//	(C) COPYRIGHT 1996-1998, INTELLUTION INC.
// ALL RIGHTS RESERVED
//
//
// 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.
//
//


#ifndef OPCDrv__H__
#define OPCDrv__H__

#include <afxtempl.h>
#include <afxcoll.h>

#include "OPC.h"

// Required Elwood headers
#include <NioDrv.h>
#include <InterfaceDef.h>


/////////////////////////////////////////////////////////////////////////////
// Cached Data Change Flags
//
#define OPC_ODC_DO				1		// Data Object without time
#define OPC_ODC_DOT				2		// Data Object with time
#define OPC_ODC_ANY				OPC_ODC_DO | OPC_ODC_DOT


/////////////////////////////////////////////////////////////////////////////
// Used for the Browse interface.
// these indicate what level of browsing we are on
//
#define DEVICE_LEVEL			0
#define DATABLOCK_LEVEL			1


/////////////////////////////////////////////////////////////////////////////
// Async transaction stuff
//
#define TRANS_WRITE				0
#define TRANS_READ				1
#define TRANS_READTIME			2


/////////////////////////////////////////////////////////////////////////////
// Types of messages capable of being sent to the driver's event window
//
#define MSG_ERROR				0
#define	MSG_WARNING				1
#define	MSG_INFO				2
#define	MSG_DEBUG				3


/////////////////////////////////////////////////////////////////////////////
// misc...
//
#define	MAX_STRING_LENGTH		256
#define THREAD_SHUTDOWN_TIME	2000


/////////////////////////////////////////////////////////////////////////////
// Forward type definitions of the classes
//
class	CImpIOPCBrowseServer;				// browse address space (optional)
class	CImpIBrowseServer;					// server browsing
class	CImpIEnumString;					// String enumeration implementation
class	COPCDrvServer;						// The server object itself
class	COPCDrvGroup;						// The Group Object itself
class	COPCDrvItem;						// A 'local' Item Class
class	COPCDrvAsyncTrans;					// Used for read/write async stuff


/////////////////////////////////////////////////////////////////////////////
// Global server variables.
// These variables keep track of state information which is global to the server process.
// The common memory allocator is required so that the server
//   can allocate items to be returned to the client.
// The client must be able to access and to free these items 
//   so they need to be in common memory.
/////////////////////////////////////////////////////////////////////////////
extern IMalloc		*pIMalloc;		// Common memory allocator


/////////////////////////////////////////////////////////////////////////////
// From OPCDrvUtility.cpp
// Utility and convenience functions
//
#define WCHAR	wchar_t

BSTR	BSTRFromWSTR(const WCHAR *s, IMalloc *pmem);	// Aloc BSTR and copy WSTR into it
void	BSTRFree(BSTR bstr, IMalloc *pmem);				// Free a BSTR
WCHAR*	WSTRFromBSTR(const BSTR bstr, IMalloc *pmem);	// Aloc a WSTR and copy a BSTR into it
WCHAR*	WSTRClone(const WCHAR *oldstr, IMalloc *pmem);
void	WSTRFree(WCHAR *c, IMalloc *pmem);
BOOL	LogEventMessage(LPCTSTR ptcMessage, LPVOID pData = NULL,
						DWORD dwDataSize = 0, DWORD dwEventID = 0, 
						WORD wType = EVENTLOG_INFORMATION_TYPE);// Send a message to event Viewer
void	RegisterEventService(void);
void	DeRegisterEventService(void);
void	IAClone(OPCITEMATTRIBUTES * pNewIA, const OPCITEMATTRIBUTES*pOldIA, IMalloc *pmem);
void	IAFree(OPCITEMATTRIBUTES *pIA, IMalloc *pmem);


/////////////////////////////////////////////////////////////////////////////
// Items shared by the class factory and the DLL or EXE mainline
//
extern	void		OPCServerUnload(void);


/////////////////////////////////////////////////////////////////////////////
// Class Factory implementation
//
/////////////////////////////////////////////////////////////////////////////
class CImpIClassFactory : public IClassFactory
{
public:
    CImpIClassFactory(REFCLSID classID);

	BOOL Register(
		DWORD				regCls = REGCLS_MULTIPLEUSE
		);
	
	BOOL Unregister(
		void
		);

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

    STDMETHODIMP		CreateInstance(
		LPUNKNOWN			pUnkOuter, 
		REFIID				riid, 
		LPVOID				*ppvObject
		);

    STDMETHODIMP		LockServer(
		BOOL				bLock
		);

protected:
    long				m_lRefCount;
};


/////////////////////////////////////////////////////////////////////////////
// OPCDrvServer object
//
// This class is an implementation of a specific version of the OPCServer class.
// There is no standard OPC Server 'object', only vendor specific objects
// so this derives from IUnKnown, but we also derive from CObject to make use
// of the MFC lists and maps.
//
/////////////////////////////////////////////////////////////////////////////
class COPCDrvServer :	public IUnknown,
						public CObject
{
	friend class CImpIOPCServer;
	friend class CImpIPersistFile;
	friend class CImpIOPCGroupStateMgt;
	friend class CImpIOPCBrowseServer;
	friend class CImpIEnumString;

	friend class COPCDrvGroup;
	friend class COPCDrvItem;

public:
	COPCDrvServer(LPUNKNOWN, void (*pfn)(void));
	~COPCDrvServer(void);

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


	//
	// Public (non-OPC) Functions
	//

	HRESULT				Init(
		void
		);

	void				UpdateDataCache(
		DWORD				dwTics
		);
	
	void				GenerateTransaction(
		DWORD				*pTransactionID
		);

	HRESULT				GetDriverInfo(
		void
		);

	BOOL				IsDataTypeSupported(
		VARTYPE				vDataType
		);

	HRESULT				SendMessageToDriver(
		CString				szMessage,
		unsigned short		nType		= MSG_ERROR
		);

private:
	// Group List Management Functions (NOT an OPC interface).
	BOOL				IsGroupValid(
		OPCHANDLE			hGroup
		);									// Validate Group Handle
	
	COPCDrvGroup		*GetGroupPtr(
		OPCHANDLE			hGroup
		);									// Given handle, return pointer
	
	int					GetNumGroupHandles(
		void
		);									// Total # Group handles
	
	HRESULT				GroupAlloc(
		OPCHANDLE			*hGroup, 
		COPCDrvGroup		**ppGroup,
		LPUNKNOWN			pUnkOuter
		);									// Alloc next avaialable Handle and 
											// get the memory for it
	HRESULT				GroupSet(
		COPCDrvGroup		*pGroup
		);									// Assign an Group to a slot
	
	HRESULT				GroupFree(
		OPCHANDLE			hGroup, 
		BOOL				bFreeMemFlag=FALSE
		);									// Remove a Group from the map

	POSITION			GetFirstGroupPosition(
		void
		);									// Returns the position of the first Group

	void				GetNextGroup(
		POSITION			&ItemPosition, 
		OPCHANDLE			&hGroup, 
		COPCDrvGroup		*&pGroup
		);									// Returns the next Group in the 
											// server relative to POSITION

	HRESULT				FreeAllGroups(
		void
		);									// free all of the groups


	// Some private (non-opc) utility functions to help with Enumeration
	void 				GetUnkList  (
		OPCENUMSCOPE		scope, 
		LPUNKNOWN			**ppGroupList, 
		int					*nGroupCount
		);

	void 				GetNameList (
		OPCENUMSCOPE		scope, 
		LPOLESTR			**ppGroupList,
		int					*nGroupCount
		);

	void				FreeNameList(
		LPOLESTR			*pGroupList,
		int					nGroupCount
		);

	void				FreeUnkList (
		LPUNKNOWN			*pGroupList,
		int					nGroupCount
		);

	// for thread safety (just in case)
	void			Lock  (void) { EnterCriticalSection(&this->m_Lock); }
	
	void			UnLock(void) { LeaveCriticalSection(&this->m_Lock); }
  
	// Public properties
	OPCSERVERSTATE				m_ServerState;				// Sate of the server
		
public:
	// Public Member Variables
	DWORD						m_dwBandwidth;				// Server's bandwidth
	DWORD						m_dwNumGroupsProcessed;		// These parameters are used to
	DWORD						m_dwTotalPasses;			// calculate the % Bandwidth of the server

	DWORD						m_dwPollThreadId;			// Poll thread ID

private:
	//
	// Private Member Variables
	//

	CImpIOPCServer				*m_pCImpIOPCServer;			// tear-off IOPCServer
	CImpIOPCBrowseServer		*m_pCImpIOPCBrowseServer;	// tear-off browse address space (optional)
	CImpIPersistFile			*m_pCImpIPersistFile;		// tear-off persist file (optional)

	long						m_lRefCount;
	FILETIME					m_ftLastUpdate;
	FILETIME					m_ftServerStartTime;
	void						(*m_pfnDestroy)(void);

	long						m_lTransactionID;			// transaction ID
	int							m_Slot;						// Asnyc helper thread slot

	DWORD						m_dwLastTickCount;			// Tick count at last process

	DWORD						m_dwNumGroups;				// Number of groups

	BOOL						m_bKeepRunning;				// Used to shutdown threads

	// I/O Driver's OLE Automation interface stuff
	//
	IDriver						*m_pIDriver;
	IDriverMessage				*m_pIDriverMessage;
	IDriverMessage				*m_pIDriverMessageMarshalled;
	IOPCConnections				*m_pIOpcConnections;
	LPSTREAM					m_pIDriverMessageStream;

	// NIO hardware options stuff
	//
	int							m_nOptionsSize;				// Size of the buffer needed
	int							m_nNumOptions;				// Number of options
	VARTYPE						*m_pvtOptionValues;			// Pointer to list of option values
	char						*m_pszOptions;				// Pointer to the buffer

	// Server thread used to perform asynchronous back-ground stuff.
	//
	HANDLE	m_hPollThread;
	static	UINT __stdcall PollThread(void *pParam);

	CRITICAL_SECTION			m_Lock;						// Critical section

	// List of groups
	CMap<OPCHANDLE, OPCHANDLE, COPCDrvGroup*, COPCDrvGroup*&> m_mapGroup;
};


/////////////////////////////////////////////////////////////////////////////
// COPCDrvGroup object
//
// This class is an implementation of a specific version of the OPCGroup class.
// We derive both from IUnknown and CObject.
//
/////////////////////////////////////////////////////////////////////////////
class COPCDrvGroup :	public IUnknown,
						public CObject
{
	friend class COPCDrvServer;
	friend class COPCDrvItem;
	friend class CImpIOPCServer;
	friend class CImpIOPCItemMgt;
	friend class CImpIOPCSyncIO;
	friend class CImpIOPCAsyncIO;
	friend class CImpIOPCGroupStateMgt;
	friend class CImpIDataObject;
	friend class CImpIEnumOPCItemAttributes;
	friend class COPCDrvAsyncTrans;


public:
	COPCDrvGroup(LPUNKNOWN);
	~COPCDrvGroup(void);

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

	// Get/Set Group active state
	void				SetActive(
		BOOL					bActive
		);

	inline BOOL			GetActive(void)	
		{ return this->m_bActive; }

	// Get/Set Group update state
	void				SetUpdateRate(
		DWORD					dwRequestedRate,
		DWORD					*pReviseRate = NULL
		);

	DWORD				GetUpdateRate(void)	
		{ return this->m_dwRevisedRate; }

	// Overloaded operators
	COPCDrvGroup &		operator=(
		const COPCDrvGroup &OtherGroup
		);


private:
	// Some private (non-opc) utility functions to help with Enumeration
	void				GetItemList (
		OPCITEMATTRIBUTES		**AttrList, 
		int						*nItemCount
		);
	
	void				FreeItemList(
		OPCITEMATTRIBUTES		*AttrList, 
		int						nItemCount
		);

	// Item List Management Functions (NOT a required OPC interface)
	BOOL				IsItemValid(
		OPCHANDLE				hItem
		);										// See if a handle is in use
	
	COPCDrvItem	*		GetItemPtr(
		OPCHANDLE				hItem
		);										// Given handle, return pointer
	
	int					GetNumItemHandles(
		void
		);										// Total # item handles
	
	HRESULT				ItemAlloc(
		OPCHANDLE				*hItem, 
		COPCDrvItem				**ppNewItem
		);										// Alloc next available Handle and 
												// add it to the map
	HRESULT				ItemSet(
		COPCDrvItem				*pItem
		);										// Assign an item to a slot
	
	HRESULT				ItemFree(
		OPCHANDLE				hItem, 
		BOOL					bFreeMemFlag=FALSE
		);										// Remove an Item from the map

	POSITION			GetFirstItemPosition(
		);										// Returns the position of the 
												// first Group in the map

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品伦理在线| 91在线一区二区三区| av一二三不卡影片| 欧美日韩国产在线观看| 国产精品青草久久| 美女视频一区二区三区| 欧美tk—视频vk| 亚洲精品国产a| 国产大陆亚洲精品国产| 欧美精品免费视频| 成人免费一区二区三区在线观看| 毛片不卡一区二区| 欧美日韩一区二区在线观看视频| 中日韩av电影| 国产最新精品免费| 欧美一级淫片007| 午夜激情一区二区三区| 一本色道亚洲精品aⅴ| 亚洲国产精品精华液ab| 国产一区二区精品久久| 精品黑人一区二区三区久久| 天天影视涩香欲综合网 | 欧美日韩在线综合| 国产精品福利一区二区| 高清不卡一二三区| 精品国产乱码久久久久久老虎| 午夜精品一区二区三区三上悠亚| 欧美色区777第一页| 亚洲一级二级在线| 欧美伊人久久大香线蕉综合69| 亚洲同性gay激情无套| 成人不卡免费av| 国产精品不卡视频| 91片在线免费观看| 亚洲乱码精品一二三四区日韩在线 | 自拍偷拍国产亚洲| 99re热视频这里只精品| 亚洲精选一二三| 欧美在线免费播放| 亚洲国产视频一区二区| 欧美精品日韩一本| 久久99国产精品免费网站| 欧美精品一区二区精品网| 国产一区二区91| 国产欧美日产一区| 99久久99久久免费精品蜜臀| 亚洲特黄一级片| 欧美色图片你懂的| 久久精品国产在热久久| 久久亚区不卡日本| 99久久精品国产精品久久| 亚洲日穴在线视频| 欧美日韩二区三区| 麻豆91精品视频| 中文字幕不卡在线播放| 欧美亚洲高清一区二区三区不卡| 偷偷要91色婷婷| 26uuu精品一区二区在线观看| 成人免费黄色大片| 亚洲一区在线观看免费观看电影高清 | 欧美成人艳星乳罩| 99视频热这里只有精品免费| 一区二区不卡在线播放| 欧美岛国在线观看| 99久久精品一区二区| 亚洲成av人片一区二区梦乃| 精品噜噜噜噜久久久久久久久试看| 成人毛片在线观看| 亚洲成人免费影院| 久久精品欧美一区二区三区不卡| 91麻豆123| 国内一区二区视频| 亚洲狠狠丁香婷婷综合久久久| 欧美va在线播放| 在线观看中文字幕不卡| 国产精品99久久久| 天天综合色天天| 亚洲欧美日韩一区二区| 精品少妇一区二区三区在线播放| av一二三不卡影片| 国产综合色产在线精品| 亚洲国产精品综合小说图片区| 久久综合九色欧美综合狠狠| 欧美特级限制片免费在线观看| 国产suv精品一区二区三区| 视频在线在亚洲| 亚洲欧美日韩国产综合在线| 久久婷婷国产综合精品青草| 欧美三级电影网站| 91在线丨porny丨国产| 精品一区二区三区视频 | 欧美日韩视频在线一区二区| 成人午夜免费av| 国产自产高清不卡| 蜜臀91精品一区二区三区 | 欧美日韩久久不卡| 成人性生交大片免费看视频在线| 日本欧美一区二区| 一区二区三区不卡在线观看| 国产精品久久久久影院亚瑟| 久久久久久久网| 精品少妇一区二区三区在线播放| 在线成人免费视频| 欧美三级午夜理伦三级中视频| 99久久综合精品| 99re热这里只有精品免费视频| 丁香网亚洲国际| 国产剧情av麻豆香蕉精品| 久久精品国产网站| 久久不见久久见中文字幕免费| 天天影视涩香欲综合网| 婷婷成人综合网| 日本不卡中文字幕| 亚洲国产视频网站| 天天免费综合色| 日韩**一区毛片| 日本欧美一区二区在线观看| 手机精品视频在线观看| 日韩二区三区四区| 免费成人美女在线观看.| 久久成人精品无人区| 国产米奇在线777精品观看| 国产v综合v亚洲欧| 99精品热视频| 欧美午夜精品免费| 欧美精品乱码久久久久久| 日韩欧美综合在线| 亚洲午夜久久久久久久久久久| 亚洲与欧洲av电影| 奇米影视7777精品一区二区| 久久国产精品一区二区| 国产传媒日韩欧美成人| 91在线视频免费91| 7777精品伊人久久久大香线蕉完整版| 欧美一级欧美三级| 久久久久久久久免费| 国产精品福利一区| 五月天亚洲婷婷| 国产美女娇喘av呻吟久久| 成人av免费网站| 欧美日韩二区三区| 欧美国产综合一区二区| 亚洲黄色小视频| 美美哒免费高清在线观看视频一区二区 | 欧美日韩午夜在线视频| 精品国产乱码久久| 亚洲视频电影在线| 日韩黄色片在线观看| 国产一区二区不卡老阿姨| 91美女精品福利| 欧美一级国产精品| 国产精品久久久久精k8 | 亚洲欧洲精品一区二区三区| 亚洲18女电影在线观看| 国产精品77777| 欧美挠脚心视频网站| 久久久久亚洲蜜桃| 亚洲成人免费电影| 国产九色sp调教91| 欧美日韩国产免费一区二区| 日本一区二区视频在线观看| 亚洲大型综合色站| bt7086福利一区国产| 91精品国产黑色紧身裤美女| 亚洲丝袜美腿综合| 久久99精品国产.久久久久久| 在线观看欧美日本| 国产精品日产欧美久久久久| 秋霞影院一区二区| 在线视频观看一区| 国产精品视频一二三区| 日韩av一区二区三区| 91精品办公室少妇高潮对白| 久久网站热最新地址| 男男视频亚洲欧美| 欧美日本一区二区在线观看| 欧美国产精品劲爆| 国产精品综合网| 精品噜噜噜噜久久久久久久久试看| 亚洲激情图片qvod| 91社区在线播放| 国产精品激情偷乱一区二区∴| 国内精品国产三级国产a久久| 欧美日韩国产123区| 玉足女爽爽91| 成人成人成人在线视频| 国产婷婷一区二区| 国内精品视频666| 欧美成人精品1314www| 五月天网站亚洲| 欧美日韩亚州综合| 亚洲综合999| 日本乱人伦一区| 亚洲美女屁股眼交| 99国产精品国产精品久久| 国产精品久久久久影视| 99久久综合狠狠综合久久| 中文字幕av一区 二区| jlzzjlzz亚洲女人18| 亚洲人xxxx|