Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите перевести код

9.5K
21 декабря 2006 года
zergman
53 / / 09.11.2006
Нашел я как отключить сообщения о javaScript ощибках, только он
на 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, &params, &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);



}
246
21 декабря 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата: zergman
Нашел я как отключить сообщения о javaScript ощибках, только он
на 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, &params, &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. Весь исходник дай глянуть.

9.5K
21 декабря 2006 года
zergman
53 / / 09.11.2006
весь исходник тут не причем (тоесть никак не связан).
Этот шмат я достал с какогото форума.
Там написанно: типо вставить этот код в исходник и все.
Мне не понятны первые 18 строчек. Или как декларировать IOleCommandTarget. А от nCmdID = 40 (ONSCRIPT_ERROR) все понятно и вроде совпадает с c++ builder. Во всяклм случае это я смогу переделать сам. А вот начало не знаю что с ним((
246
25 декабря 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата: 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.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог