1. ホーム
  2. c++

[解決済み] IWebBrowser2のインスタンスを取得する方法

2022-02-16 04:14:54

質問

C++は少し初心者です、お手柔らかにお願いします。

Internet Explorerを自動化しようとしています。私は、ローカルサーバーを使用してIEのインスタンスを作成しようとしている簡単なWin32コンソールアプリケーションを持っています。

しかし、私の CoCreateInstance() を初期化するためのオブジェクトを返さないのです。 IWebBrowser2 という変数があります。

何が足りないのか、教えていただきたいのですが。

以下は私のコードです。

HRESULT InstanciateIEResult;
HRESULT NavigateResult;
HRESULT ShowBrowserResult;

VARIANT * empty = new VARIANT();

BSTR URL = L"bing.com";
IWebBrowser2*    pBrowser2;

InstanciateIEResult = CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,
    IID_IWebBrowser2, (void**)&pBrowser2);


if(pBrowser2)
{
    //never reach here
    NavigateResult = pBrowser2->Navigate(URL, empty, empty, empty, empty);
    ShowBrowserResult = pBrowser2->put_Visible(VARIANT_TRUE);
} 

の内容をどうデコードすればいいのかもよくわかりません。 HRESULT を返します。もしご存知でしたら、それも参考になります。

のドキュメントを見ていたのですが IWebBrowser2 インターフェース CoCreateInstance .

どのように解決するのですか?

を呼び出す必要があります。 CoInitialize() COMオブジェクトを使用する前に

また SysAllocString() を使用して文字列を割り当てます。

#include <windows.h>
#include <MsHTML.h>
#include <Exdisp.h>
#include <ExDispid.h>

int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    CoInitialize(NULL);

    HRESULT InstanciateIEResult;
    HRESULT NavigateResult;
    HRESULT ShowBrowserResult;

    VARIANT empty;
    VariantInit(&empty);

    IWebBrowser2* browser = NULL;
    HRESULT hr = CoCreateInstance(CLSID_InternetExplorer, NULL,
            CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&browser);

    if (browser)
    {
        BSTR URL = SysAllocString(L"bing.com");
        NavigateResult = browser->Navigate(URL, &empty, &empty, &empty, &empty);
        SysFreeString(URL);

        ShowBrowserResult = browser->put_Visible(VARIANT_TRUE);
        browser->Release();
    }

    CoUninitialize();
    return 0;
}