c++ - 如何获取 IWebBrowser2 的实例

标签 c++ windows com ole

我对 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 interface 的文档和 CoCreateInstance .

最佳答案

在使用 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;
}

关于c++ - 如何获取 IWebBrowser2 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40413275/

相关文章:

c++ - Maya API - 从 Material 中获取网格

windows - Julia,Windows 10 上的 ArchGDAL 安装错误

windows - 为什么 CMD 转义字符会变魔术而不是转义新行

c# - 带线程的 CoreAudioApi - InvalidCastException

c++ - IRC channel 正则表达式组合

c++ - C++0x 中的闭包和嵌套 lambda

c++ - 在 ubuntu 14.04 LTS 上编译 fileZilla

c++ - 去除activex ie控件上的边框

windows - 您可以从服务器端 javascript 调用 COM 组件吗?

c# - 应该以什么顺序释放 COM 对象和垃圾收集?