get_body из аварийной программы IHTMLDocument2 - PullRequest
0 голосов
/ 09 мая 2018

сбой программы

Исключение первого шанса в 0x00000000 в MFCApplication4.exe: 0xC0000005: расположение выполнения нарушения прав доступа 0x00000000.

    HINSTANCE hInst = ::LoadLibrary(_T("OLEACC.DLL"));
    CoInitialize(NULL);


    if (hInst != NULL)
    {
        if (parentWindow != NULL)
        {


            if (childWindow)
            {
                CComPtr<IHTMLDocument2> spDoc;
                LRESULT lRes;

                UINT nMsg = ::RegisterWindowMessage(_T("WM_HTML_GETOBJECT"));
                ::SendMessageTimeout(childWindow, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes);

                LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress(hInst, LPCSTR("ObjectFromLresult"));
                if (pfObjectFromLresult != NULL)
                {
                    HRESULT hr;
                    hr = (*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc);
                    if (SUCCEEDED(hr))
                    {
                        CComPtr<IHTMLElement> pHTMLElement;
                        hr = spDoc->get_body(&pHTMLElement);// <-this line breaks the program 
                        //BSTR bstrText;
                        //pHTMLElement->get_innerText(&bstrText);

                        //edit1->SetWindowTextW(bstrText);

                    }
                }
            }
        } 
        ::FreeLibrary(hInst);
    } 
    CoUninitialize();

Я выполняю этот код с помощью кнопки из диалогового приложения MFC, просто чтобы проверить код это авто

  • & pHTMLElement 0x00ddeb10 0x00000000
    ATL :: CComPtr *
  • ч S_OK HRESULT
  • pHTMLElement 0x00000000 ATL :: CComPtr
  • spDoc 0x03303f7c {...} ATL :: CComPtr
  • this 0x00ddfbd8 {hWnd = 0x001905b6 {unused = ??? }} CMFCApplication4Dlg *

я не знаю, в чем ошибка

1 Ответ

0 голосов
/ 09 мая 2018

На этой строке:

hr = (*pfObjectFromLresult)(lRes, IID_IHTMLDocument, 0, (void**)&spDoc);

Вы запрашиваете IHTMLDocument, но указываете на IHTMLDocument2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...