【问题标题】:How to get an Instance of IWebBrowser2如何获取 IWebBrowser2 的实例
【发布时间】:2017-03-17 17:35:10
【问题描述】:

我对C++有点陌生,请温柔。

我正在尝试自动化 Internet Explorer。我有一个简单的 Win32 控制台应用程序,我正在尝试使用本地服务器创建一个 IE 实例。

但是,我对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 interfaceCoCreateInstance 的文档。

【问题讨论】:

  • 也许你没有打电话给CoInitialize(NULL)。显示所有相关代码,而不是零碎的代码。
  • 谢谢你,让它工作。我没有打那个电话,它没有用。如果你能把它变成一个答案,我会给你信用。
  • 如果您查看了CoCreateInstance() 的返回值,您会发现它返回的是0x800401F0,也就是CO_E_NOTINITIALIZED(“尚未调用CoInitialize”)。不要忽略返回值!

标签: c++ windows com ole


【解决方案1】:

您需要在使用 COM 对象之前调用CoInitialize()

另外,你需要使用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;
}

【讨论】:

  • 您能帮我将 BSTR 转换为 VARIANT 或用字符串初始化 Variant 吗?
  • @AlexanderRyanBaggett:请为此发布一个新问题。它不适用于这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-27
  • 2019-07-08
  • 1970-01-01
  • 2023-03-03
  • 2012-10-11
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多