📄 hostsite.h
字号:
/////////////////////////////////////////////////////////////
//
// hostsite.h - Don Box, 1996-1997
//
// An implementation of an active script site object object that
// a single automation object named "shell"
//
#ifndef _HOSTSITE_H
#define _HOSTSITE_H
HRESULT LoadTypeInfoFromThisModule(REFIID riid, ITypeInfo **ppti);
class CActiveScriptSite : public IActiveScriptSite,
public IActiveScriptSiteWindow {
LONG m_cRef;
IDispatch *m_pdispshell;
public:
CActiveScriptSite(IDispatch *pshell)
: m_cRef(0), m_pdispshell(pshell) {
if (m_pdispshell)
m_pdispshell->AddRef();
}
~CActiveScriptSite(void) {
if (m_pdispshell)
m_pdispshell->Release();
}
// IUnknown methods
STDMETHODIMP QueryInterface(REFIID riid, void **ppv) {
if (riid == IID_IUnknown||riid == IID_IActiveScriptSite)
*ppv = (IActiveScriptSite*)this;
else if (riid == IID_IActiveScriptSiteWindow)
*ppv = (IActiveScriptSiteWindow*)this;
else
return (*ppv = 0), E_OUTOFMEMORY;
((IUnknown*)*ppv)->AddRef();
return S_OK;
}
STDMETHODIMP_(ULONG) AddRef()
{ return InterlockedIncrement(&m_cRef); }
STDMETHODIMP_(ULONG) Release() {
if (InterlockedDecrement(&m_cRef))
return m_cRef;
delete this;
return 0;
}
// IActiveScriptSite methods
STDMETHODIMP GetItemInfo(LPCOLESTR pstrName, DWORD dwReturnMask,
IUnknown **ppiunkItem, ITypeInfo **ppti) {
HRESULT hr = E_FAIL;
if (dwReturnMask & SCRIPTINFO_IUNKNOWN)
*ppiunkItem = 0;
if (dwReturnMask & SCRIPTINFO_ITYPEINFO)
*ppti = 0;
// see if top-level name is "shell"
if (wcscmp(pstrName, OLESTR("shell")) == 0) {
if (dwReturnMask & SCRIPTINFO_IUNKNOWN)
if (*ppiunkItem = m_pdispshell)
{
(*ppiunkItem)->AddRef();
hr = S_OK;
}
if (dwReturnMask & SCRIPTINFO_ITYPEINFO)
hr = LoadTypeInfoFromThisModule(CLSID_CHostShell, ppti);
}
return hr;
}
STDMETHODIMP OnScriptError(IActiveScriptError *pscripterror) {
DWORD dwCookie;
LONG nChar;
ULONG nLine;
BSTR bstr = 0;
EXCEPINFO ei; ZeroMemory(&ei, sizeof(ei));
pscripterror->GetSourcePosition(&dwCookie, &nLine, &nChar);
pscripterror->GetSourceLineText(&bstr);
pscripterror->GetExceptionInfo(&ei);
OLECHAR wszOutput[1024];
swprintf(wszOutput, OLESTR("%s\n[Line: %d] %s\n%s"),
ei.bstrSource, nLine, ei.bstrDescription,
bstr ? bstr : OLESTR(""));
SysFreeString(bstr);
SysFreeString(ei.bstrSource);
SysFreeString(ei.bstrDescription);
SysFreeString(ei.bstrHelpFile);
MessageBoxW(GetDesktopWindow(),
wszOutput,
L"Error",
MB_SETFOREGROUND);
return S_OK;
}
STDMETHODIMP GetLCID(LCID *plcid)
{ *plcid = 9; return S_OK; }
STDMETHODIMP GetDocVersionString(BSTR *pbstrVersion)
{ *pbstrVersion = SysAllocString(L""); return S_OK; }
STDMETHODIMP OnScriptTerminate(const VARIANT *pvr, const EXCEPINFO *pei)
{ return S_OK; }
STDMETHODIMP OnStateChange(SCRIPTSTATE ssScriptState)
{ return S_OK; }
STDMETHODIMP OnEnterScript(void)
{ return S_OK; }
STDMETHODIMP OnLeaveScript(void)
{ return S_OK; }
// IActiveScriptSiteWindow methods
STDMETHODIMP GetWindow(HWND *phwnd)
{ *phwnd = GetDesktopWindow(); return S_OK; }
STDMETHODIMP EnableModeless(BOOL)
{ return S_OK; }
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -