BEGIN_INTERFACE_PART(OleCommandTarget, IOleCommandTarget)
STDMETHOD(QueryStatus)(const GUID*, ULONG, OLECMD*, OLECMDTEXT*);
STDMETHOD(Exec)(const GUID*, DWORD, DWORD, VARIANTARG*, VARIANTARG*);
END_INTERFACE_PART(OleCommandTarget)
STDMETHODIMP CSupremeControlSite::XOleCommandTarget::Exec(const GUID*
pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdexecopt,
VARIANTARG* pvaIn,
VARIANTARG* pvaOut )
{
METHOD_PROLOGUE_EX_(CSupremeControlSite, OleCommandTarget)
HRESULT hr = S_OK;
if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup,
CGID_DocHostCommandHandler))
{
switch (nCmdID)
{
case OLECMDID_SHOWSCRIPTERROR:
{
IHTMLDocument2* pDoc = NULL;
IHTMLWindow2* pWindow = NULL;
IHTMLEventObj* pEventObj = NULL;
BSTR rgwszNames[5] =
{
SysAllocString(L"errorLine"),
SysAllocString(L"errorCharacter"),
SysAllocString(L"errorCode"),
SysAllocString(L"errorMessage"),
SysAllocString(L"errorUrl")
};
DISPID rgDispIDs[5];
VARIANT rgvaEventInfo[5];
DISPPARAMS params;
BOOL fContinueRunningScripts = true;
int i;
params.cArgs = 0;
params.cNamedArgs = 0;
hr = pvaIn->punkVal->QueryInterface(IID_IHTMLDocument2, (void **)
&pDoc);
hr = pDoc->get_parentWindow(&pWindow);
pDoc->Release();
hr = pWindow->get_event(&pEventObj);
for (i = 0; i < 5; i++)
{
hr = pEventObj->GetIDsOfNames(IID_NULL, &rgwszNames, 1,
LOCALE_SYSTEM_DEFAULT, &rgDispIDs);
hr = pEventObj->Invoke(rgDispIDs, IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, ¶ms, &rgvaEventInfo,NULL, NULL);
SysFreeString(rgwszNames);
}
(*pvaOut).vt = VT_BOOL;
(*pvaOut).boolVal = VARIANT_TRUE;
break;
}
case OLECMDID_SHOWMESSAGE:
//(*pvaOut).boolVal = VARIANT_TRUE;
break;
default:
hr = OLECMDERR_E_NOTSUPPORTED;
break;
}
}
else
{
hr = OLECMDERR_E_UNKNOWNGROUP;
}
return (hr);
}
Помогите перевести код
на Visual C++. Помогите переделать его под билдер.
Хотябы первые 18 строк (до if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup, CGID_DocHostCommandHandler)) )
Код:
Цитата: zergman
Нашел я как отключить сообщения о javaScript ощибках, только он
на Visual C++. Помогите переделать его под билдер.
Хотябы первые 18 строк (до if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup, CGID_DocHostCommandHandler)) )
на Visual C++. Помогите переделать его под билдер.
Хотябы первые 18 строк (до if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup, CGID_DocHostCommandHandler)) )
Код:
BEGIN_INTERFACE_PART(OleCommandTarget, IOleCommandTarget)
STDMETHOD(QueryStatus)(const GUID*, ULONG, OLECMD*, OLECMDTEXT*);
STDMETHOD(Exec)(const GUID*, DWORD, DWORD, VARIANTARG*, VARIANTARG*);
END_INTERFACE_PART(OleCommandTarget)
STDMETHODIMP CSupremeControlSite::XOleCommandTarget::Exec(const GUID*
pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdexecopt,
VARIANTARG* pvaIn,
VARIANTARG* pvaOut )
{
METHOD_PROLOGUE_EX_(CSupremeControlSite, OleCommandTarget)
HRESULT hr = S_OK;
if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup,
CGID_DocHostCommandHandler))
{
switch (nCmdID)
{
case OLECMDID_SHOWSCRIPTERROR:
{
IHTMLDocument2* pDoc = NULL;
IHTMLWindow2* pWindow = NULL;
IHTMLEventObj* pEventObj = NULL;
BSTR rgwszNames[5] =
{
SysAllocString(L"errorLine"),
SysAllocString(L"errorCharacter"),
SysAllocString(L"errorCode"),
SysAllocString(L"errorMessage"),
SysAllocString(L"errorUrl")
};
DISPID rgDispIDs[5];
VARIANT rgvaEventInfo[5];
DISPPARAMS params;
BOOL fContinueRunningScripts = true;
int i;
params.cArgs = 0;
params.cNamedArgs = 0;
hr = pvaIn->punkVal->QueryInterface(IID_IHTMLDocument2, (void **)
&pDoc);
hr = pDoc->get_parentWindow(&pWindow);
pDoc->Release();
hr = pWindow->get_event(&pEventObj);
for (i = 0; i < 5; i++)
{
hr = pEventObj->GetIDsOfNames(IID_NULL, &rgwszNames, 1,
LOCALE_SYSTEM_DEFAULT, &rgDispIDs);
hr = pEventObj->Invoke(rgDispIDs, IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, ¶ms, &rgvaEventInfo,NULL, NULL);
SysFreeString(rgwszNames);
}
(*pvaOut).vt = VT_BOOL;
(*pvaOut).boolVal = VARIANT_TRUE;
break;
}
case OLECMDID_SHOWMESSAGE:
//(*pvaOut).boolVal = VARIANT_TRUE;
break;
default:
hr = OLECMDERR_E_NOTSUPPORTED;
break;
}
}
else
{
hr = OLECMDERR_E_UNKNOWNGROUP;
}
return (hr);
}
STDMETHOD(QueryStatus)(const GUID*, ULONG, OLECMD*, OLECMDTEXT*);
STDMETHOD(Exec)(const GUID*, DWORD, DWORD, VARIANTARG*, VARIANTARG*);
END_INTERFACE_PART(OleCommandTarget)
STDMETHODIMP CSupremeControlSite::XOleCommandTarget::Exec(const GUID*
pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdexecopt,
VARIANTARG* pvaIn,
VARIANTARG* pvaOut )
{
METHOD_PROLOGUE_EX_(CSupremeControlSite, OleCommandTarget)
HRESULT hr = S_OK;
if (pguidCmdGroup && IsEqualGUID(*pguidCmdGroup,
CGID_DocHostCommandHandler))
{
switch (nCmdID)
{
case OLECMDID_SHOWSCRIPTERROR:
{
IHTMLDocument2* pDoc = NULL;
IHTMLWindow2* pWindow = NULL;
IHTMLEventObj* pEventObj = NULL;
BSTR rgwszNames[5] =
{
SysAllocString(L"errorLine"),
SysAllocString(L"errorCharacter"),
SysAllocString(L"errorCode"),
SysAllocString(L"errorMessage"),
SysAllocString(L"errorUrl")
};
DISPID rgDispIDs[5];
VARIANT rgvaEventInfo[5];
DISPPARAMS params;
BOOL fContinueRunningScripts = true;
int i;
params.cArgs = 0;
params.cNamedArgs = 0;
hr = pvaIn->punkVal->QueryInterface(IID_IHTMLDocument2, (void **)
&pDoc);
hr = pDoc->get_parentWindow(&pWindow);
pDoc->Release();
hr = pWindow->get_event(&pEventObj);
for (i = 0; i < 5; i++)
{
hr = pEventObj->GetIDsOfNames(IID_NULL, &rgwszNames, 1,
LOCALE_SYSTEM_DEFAULT, &rgDispIDs);
hr = pEventObj->Invoke(rgDispIDs, IID_NULL,LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, ¶ms, &rgvaEventInfo,NULL, NULL);
SysFreeString(rgwszNames);
}
(*pvaOut).vt = VT_BOOL;
(*pvaOut).boolVal = VARIANT_TRUE;
break;
}
case OLECMDID_SHOWMESSAGE:
//(*pvaOut).boolVal = VARIANT_TRUE;
break;
default:
hr = OLECMDERR_E_NOTSUPPORTED;
break;
}
}
else
{
hr = OLECMDERR_E_UNKNOWNGROUP;
}
return (hr);
}
вроде достаточно вернуть:
(*pvaOut).vt = VT_BOOL;
(*pvaOut).boolVal = VARIANT_TRUE;
P.S. Весь исходник дай глянуть.
Этот шмат я достал с какогото форума.
Там написанно: типо вставить этот код в исходник и все.
Мне не понятны первые 18 строчек. Или как декларировать IOleCommandTarget. А от nCmdID = 40 (ONSCRIPT_ERROR) все понятно и вроде совпадает с c++ builder. Во всяклм случае это я смогу переделать сам. А вот начало не знаю что с ним((
Цитата: zergman
Мне не понятны первые 18 строчек. Или как декларировать IOleCommandTarget.
Код:
//BEGIN_INTERFACE_PART(OleCommandTarget, IOleCommandTarget)
// STDMETHOD(QueryStatus)(const GUID*, ULONG, OLECMD*, OLECMDTEXT*);
// STDMETHOD(Exec)(const GUID*, DWORD, DWORD, VARIANTARG*, VARIANTARG*);
//END_INTERFACE_PART(OleCommandTarget)
class TOleCommandTarget : public IOleCommandTarget
{
public:
TOleCommandTarget();
~TOleCommandTarget();
// IUnknown
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID classid, void** intf);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
// IOleCommandTarget
virtual HRESULT STDMETHODCALLTYPE QueryStatus(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ ULONG cCmds,
/*[in,out][size_is(cCmds)]*/ OLECMD *prgCmds,
/*[in,out]*/ OLECMDTEXT *pCmdText);
virtual HRESULT STDMETHODCALLTYPE Exec(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ DWORD nCmdID,
/*[in]*/ DWORD nCmdExecOpt,
/*[in]*/ VARIANTARG *pvaIn,
/*[in,out]*/ VARIANTARG *pvaOut);
private:
long refcount;
};
// METHOD_PROLOGUE_EX_(CSupremeControlSite, OleCommandTarget)
//если сделать предположение, то генерит какой-то спецф. пролог у метода см. хелп по MFC.
// STDMETHOD(QueryStatus)(const GUID*, ULONG, OLECMD*, OLECMDTEXT*);
// STDMETHOD(Exec)(const GUID*, DWORD, DWORD, VARIANTARG*, VARIANTARG*);
//END_INTERFACE_PART(OleCommandTarget)
class TOleCommandTarget : public IOleCommandTarget
{
public:
TOleCommandTarget();
~TOleCommandTarget();
// IUnknown
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID classid, void** intf);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
// IOleCommandTarget
virtual HRESULT STDMETHODCALLTYPE QueryStatus(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ ULONG cCmds,
/*[in,out][size_is(cCmds)]*/ OLECMD *prgCmds,
/*[in,out]*/ OLECMDTEXT *pCmdText);
virtual HRESULT STDMETHODCALLTYPE Exec(
/*[in]*/ const GUID *pguidCmdGroup,
/*[in]*/ DWORD nCmdID,
/*[in]*/ DWORD nCmdExecOpt,
/*[in]*/ VARIANTARG *pvaIn,
/*[in,out]*/ VARIANTARG *pvaOut);
private:
long refcount;
};
// METHOD_PROLOGUE_EX_(CSupremeControlSite, OleCommandTarget)
//если сделать предположение, то генерит какой-то спецф. пролог у метода см. хелп по MFC.