📄 opc.h
字号:
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 + -