📄 chmprotocol.h
字号:
// CHMProtocol.h
//
//////////////////////////////////////////////////////////////////////
#ifndef __H_CHMPROTOCOL__
#define __H_CHMPROTOCOL__
#undef __urlmon_h__
#include <urlmon.h>
#ifndef MAX_URL
#define MAX_URL 2048
#endif
extern "C" const GUID CLSID_CHMProtocol;
typedef void(*pfnCallbackFunction)(void *pContext, void *pParam, DWORD dwParam);
template <class PI>
inline void
ReplaceInterface(PI * ppI, PI pI)
{
#if DBG == 1
IUnknown * pUnk = *ppI;
#endif
ReplaceInterfaceFn((IUnknown **) ppI, pI);
}
class CCHMProtocolCF:
public IClassFactory,
public IInternetProtocolInfo
{
public:
CCHMProtocolCF(pfnCallbackFunction pfncallback = NULL, void *pContext = NULL);
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID, void **ppv);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// IClassFactory methods
STDMETHOD(CreateInstance)(IUnknown *, REFIID, void **ppv);
STDMETHOD (LockServer)(BOOL);
// IInternetProtocolInfo methods
STDMETHOD(ParseUrl)(LPCWSTR pwzUrl,
PARSEACTION ParseAction,
DWORD dwFlags,
LPWSTR pwzResult,
DWORD cchResult,
DWORD * pcchResult,
DWORD dwReserved);
STDMETHOD(CombineUrl)(LPCWSTR pwzBaseUrl,
LPCWSTR pwzRelativeUrl,
DWORD dwFlags,
LPWSTR pwzResult,
DWORD cchResult,
DWORD * pcchResult,
DWORD dwReserved);
STDMETHOD(CompareUrl)(LPCWSTR pwzUrl1,
LPCWSTR pwzUrl2,
DWORD dwFlags);
STDMETHOD(QueryInfo)(LPCWSTR pwzUrl,
QUERYOPTION QueryOption,
DWORD dwQueryFlags,
LPVOID pBuffer,
DWORD cbBuffer,
DWORD * pcbBuf,
DWORD dwReserved);
private:
long _cRefs;
pfnCallbackFunction m_pfnCallBack;
void* m_pCallBackContext;
};
class CCHMProtocol :
public IInternetProtocol,
public IInternetPriority
{
public:
CCHMProtocol(CCHMProtocolCF *pOwner = NULL, pfnCallbackFunction pfncallback = NULL, void *pContext = NULL);
~CCHMProtocol();
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID, void **ppv);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// IInternetProtocol methods
STDMETHOD(Start)(
LPCWSTR szUrl,
IInternetProtocolSink *pProtSink,
IInternetBindInfo *pOIBindInfo,
DWORD grfSTI,
HANDLE_PTR dwReserved);
STDMETHOD(Continue)(PROTOCOLDATA *pStateInfo);
STDMETHOD(Abort)(HRESULT hrReason,DWORD dwOptions);
STDMETHOD(Terminate)(DWORD dwOptions);
STDMETHOD(Suspend)();
STDMETHOD(Resume)();
STDMETHOD(Read)(void *pv,ULONG cb,ULONG *pcbRead);
STDMETHOD(Seek)(
LARGE_INTEGER dlibMove,
DWORD dwOrigin,
ULARGE_INTEGER *plibNewPosition);
STDMETHOD(LockRequest)(DWORD dwOptions);
STDMETHOD(UnlockRequest)();
STDMETHOD(SetPriority)(LONG nPriority);
STDMETHOD(GetPriority)(LONG __RPC_FAR *pnPriority);
public:
CCHMProtocolCF *m_pCHMProtocolCF;
private:
long _cRefs;
HANDLE m_file;
CCHMProtocolCF *m_pOwnerCF;
pfnCallbackFunction m_pfnCallBack;
LONG m_priority;
void* m_pCallBackContext;
};
#endif /*__H_CHMPROTOCOL__*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -