⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opc.h

📁 基于Intellution开发包的开发的OPC服务器
💻 H
📖 第 1 页 / 共 2 页
字号:
	LPUNKNOWN m_pUnkOuter;	// Pointer to outer or controlling IUnknown	
	COPCDrvGroup *m_pParentGroup;	// Pointer to 'owning' COPCDrvGroup
};



/////////////////////////////////////////////////////////////////////////////
//
//	Implementation class for the IOPCAsyncIO Interface
//
/////////////////////////////////////////////////////////////////////////////
class CImpIOPCAsyncIO : public IOPCAsyncIO
{
  public:
    CImpIOPCAsyncIO( LPUNKNOWN );
    ~CImpIOPCAsyncIO( void);

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

  	// the IOPCAsyncIO Functions
	STDMETHODIMP	Read(
		DWORD           dwConnection,
		OPCDATASOURCE   dwSource,
		DWORD           dwNumItems,
		OPCHANDLE		*phServer,
		DWORD			*pTransactionID,
		HRESULT			**ppErrors
		);

	STDMETHODIMP	Write(
		DWORD			dwConnection,
		DWORD			dwNumItems, 
		OPCHANDLE		*phServer,
		VARIANT			*pItemValues, 
		DWORD			*pTransactionID,
		HRESULT			**ppErrors
		);

	STDMETHODIMP	Refresh(
		DWORD			dwConnection,
		OPCDATASOURCE	dwSource,
		DWORD			*pTransactionID
		);

	STDMETHODIMP	Cancel(
		DWORD			dwTransactionID
		);

  private:

	// Member Variables
	LPUNKNOWN		m_pUnkOuter;		// Pointer to outer or controlling IUnknown
	COPCDrvGroup	*m_pParentGroup;	// Pointer to 'owning' COPCDrvGroup
};



/////////////////////////////////////////////////////////////////////////////
//
//	Implementation class for the IOPCItemMgt Interface
//
/////////////////////////////////////////////////////////////////////////////
class CImpIOPCItemMgt : public IOPCItemMgt
{
  public:
    CImpIOPCItemMgt(LPUNKNOWN);
    ~CImpIOPCItemMgt(void);

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

	// the IOPCItemMgt Functions
	STDMETHODIMP	AddItems( 
		DWORD			dwNumItems,
		OPCITEMDEF		*pItemArray,
		OPCITEMRESULT	**ppAddResults,
		HRESULT			**ppErrors
		);

	STDMETHODIMP	ValidateItems( 
		DWORD			dwNumItems,
		OPCITEMDEF		*pItemArray,
		BOOL			bBlobUpdate,
		OPCITEMRESULT	**ppValidationResults,
		HRESULT			**ppErrors
		);

	STDMETHODIMP	RemoveItems( 
		DWORD			dwNumItems,
		OPCHANDLE		*phServer,
		HRESULT			**ppErrors
		);

	STDMETHODIMP	SetActiveState(
		DWORD			dwNumItems,
		OPCHANDLE		*phServer,
		BOOL			bActive, 
		HRESULT			**ppErrors
		);

	STDMETHODIMP	SetClientHandles(
		DWORD			dwNumItems,
		OPCHANDLE		*phServer,
		OPCHANDLE		*phClient,
		HRESULT			**ppErrors
		);

	STDMETHODIMP	SetDatatypes(
		DWORD			dwNumItems,
		OPCHANDLE		*phServer,
		VARTYPE			*pRequestedDatatypes,
		HRESULT			**ppErrors
		);
 
	STDMETHODIMP	CreateEnumerator(
		REFIID			riid,
		LPUNKNOWN		*ppUnk
		);
  
  private:

	// Member Variables
	LPUNKNOWN		m_pUnkOuter;		// Pointer to outer or controlling IUnknown
	COPCDrvGroup	*m_pParentGroup;	// Pointer to 'owning' COPCDrvGroup
};



/////////////////////////////////////////////////////////////////////////////
//
//	Implementation class for the IDataObject Interface
//
/////////////////////////////////////////////////////////////////////////////
class CImpIDataObject : public IDataObject
{
  friend class COPCDrvGroup;

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

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

	// the IDataObject Functions
	STDMETHODIMP	GetData( 
		FORMATETC		*pformatetcIn,
		STGMEDIUM		*pmedium
		);
        
	STDMETHODIMP	GetDataHere( 
		FORMATETC		*pformatetc,
		STGMEDIUM		*pmedium
		);
        
	STDMETHODIMP	QueryGetData( 
		FORMATETC		*pformatetc
		);
        
	STDMETHODIMP	GetCanonicalFormatEtc( 
		FORMATETC		*pformatectIn,
		FORMATETC		*pformatetcOut
		);
        
	STDMETHODIMP	SetData( 
		FORMATETC		*pformatetc,
		STGMEDIUM		*pmedium,
		BOOL			fRelease
		);
        
	STDMETHODIMP	EnumFormatEtc( 
		DWORD			dwDirection,
		IEnumFORMATETC	**ppenumFormatEtc
		);
        
	STDMETHODIMP	DAdvise( 
		FORMATETC		*pformatetc,
		DWORD			advf,
		IAdviseSink		*pAdvSink,
		DWORD			*pdwConnection
		);
        
	STDMETHODIMP DUnadvise( 
		DWORD			dwConnection
		);
        
	STDMETHODIMP EnumDAdvise( 
		IEnumSTATDATA	**ppenumAdvise
		);

	// Helpers used to determine is the client has registered for callbacks
	//
	inline BOOL		IsAdvisedForData(
		void
		)	{ return (m_dataCallback ? TRUE : FALSE); }

	inline BOOL		IsAdvisedForDataTime(
		void
		)	{ return (m_datatimeCallback ? TRUE : FALSE); }

	inline BOOL		IsAdvisedForWriteComplete(
		void
		)	{ return (m_writeCallback ? TRUE : FALSE); }
	 
  private:
	// Member Variables
	LPUNKNOWN		m_pUnkOuter;		// Pointer to outer or controlling IUnknown
	COPCDrvGroup	*m_pParentGroup;	// Pointer to 'owning' COPCDrvGroup

	IAdviseSink		*m_dataCallback;
	IAdviseSink		*m_datatimeCallback;
	IAdviseSink		*m_writeCallback;

	LPSTREAM		m_pdatatimeStm;
	LPSTREAM		m_pdataStm;
	LPSTREAM		m_pwriteStm;

	UINT			m_data;
	UINT			m_datatime;
	UINT			m_write;
};


/////////////////////////////////////////////////////////////////////////////
//
//	Implementation class for the IOPCBrowseServerAddressSpace Interface
//
/////////////////////////////////////////////////////////////////////////////
class CImpIOPCBrowseServer : public IOPCBrowseServerAddressSpace
{
public:
	//
	// Constructor/Destructor
	//
	CImpIOPCBrowseServer(LPUNKNOWN);
	~CImpIOPCBrowseServer();

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

	//
	// IOPCBrowseServerAddressSpace interface functions
	//
	STDMETHODIMP	QueryOrganization( 
		OPCNAMESPACETYPE*	pNameSpaceType
		);

	STDMETHODIMP	ChangeBrowsePosition( 
		OPCBROWSEDIRECTION	dwBrowseDirection,
		LPCWSTR				szString
		);

	STDMETHODIMP	BrowseOPCItemIDs( 
		OPCBROWSETYPE		dwBrowseFilterType,
		LPCWSTR				szFilterCriteria,
		VARTYPE				vtDataTypeFilter,
		DWORD				dwAccessRightsFilter,
		LPENUMSTRING*		ppIEnumString
		);

	STDMETHODIMP	GetItemID( 
		LPWSTR				szItemDataID,
		LPWSTR*				szItemID
		);

	STDMETHODIMP	BrowseAccessPaths( 
		LPCWSTR				szItemID,
		LPENUMSTRING*		ppIEnumString
		);

private:
	//
	// Private utility functions
	//
	HRESULT	GetHandleFromName(
		CString			strName,
		long			&lHandle,
		BOOL			bIsDataBlock = FALSE);	// Returns a device or datablock handle, 
												// given its name.

	HRESULT	GetDeviceList(
		CLongPtrMap		*mapStrings,
		long			*NumDevices,
		OPCBROWSETYPE	dwBrowseType,
		CString			strFilterString,
		FILTERTYPE		dwFilterType);			// Fills the map with all device names
												// for a given driver name

	HRESULT	GetDatablockList(
		CLongPtrMap		*mapStrings,
		long			*lNumDataBlocks,
		CString			strDeviceName,
		OPCBROWSETYPE	dwBrowseType,
		CString			strFilterString,
		FILTERTYPE		dwFilterType);			// Fills the map with all Datablocks
												// for a given driver and device

	HRESULT	GetDataBlockPropertyList(
		);										// Fills a variant array with the property
												// names required for datablock browsing

	HRESULT	FreeDataBlockPropertyList(
		);										// Frees the data in the variant array

	HRESULT	GetDataBlockPropertyData(
		long			lDataBlockHandle,
		char			*pszPropertyData);
												// Gets the property data for a given datablock

	void	FreeMapMemory(
		CLongPtrMap		*mapStrings);			// Frees all memory allocated in a map.
												// This is used in the event of an error.

	HRESULT	GetFilter(
		CString			&strFilter,
		FILTERTYPE		&dwFilterType);			// Gets the filtering type and search
												// string.

	BOOL	FilterString(
		CString			strString,
		CString			strFilter,
		FILTERTYPE		dwFilterType);			// Deterines if a string matches the
												// filtering criteria.

	HRESULT	BrowseHierarchial(
		CLongPtrMap		*pMap,
		long			*lNumEntries,
		OPCBROWSETYPE	dwBrowseFilterType,
		CString			szFilterCriteria,
		FILTERTYPE		dwFilterType);

	HRESULT	BrowseFlat(
		CLongPtrMap		*pMap,
		long			*lNumEntries,
		CString			szFilterCriteria,
		FILTERTYPE		dwFilterType);

	//
	// Private data members
	//
	LPUNKNOWN				m_pUnkOuter;		// Pointer to controlling IUnknown
	COPCDrvServer			*m_pParentServer;	// Pointer to parent server

	DWORD					m_dwLevel;			// Browse level (Driver,Device,DataBlock)
	CString					m_szDeviceName;		// Device name

	VARIANT					m_vPropertyNames;	// Variant array containing property names

	// 
	// Critical section stuff (just in case)
	//
	CRITICAL_SECTION		m_Lock;
	void	Lock(void)		{ EnterCriticalSection(&this->m_Lock); }
	void	UnLock(void)	{ LeaveCriticalSection(&this->m_Lock); }
};


#endif // OPC_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -