2016-11-04 61 views
1

我对C++有点新鲜,请温柔一点。如何获取IWebBrowser2的实例

我试图自动化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

+1

也许你没叫'CoInitialize的(NULL)'。显示所有相关的代码,而不是零碎。 –

+0

谢谢,这使它工作。我没有打过电话,但没有成功。如果你能把它变成答案,我会给你信用。 –

+1

你看过'CoCreateInstance()'的返回值,你会看到它返回'0x800401F0',又名'CO_E_NOTINITIALIZED'(“CoInitialize has not been called”)。不要忽略返回值! –

回答

0

您需要在使用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; 
} 
+0

你能帮我把一个BSTR转换成VARIANT或用一串字符初始化一个变体吗? –

+0

@AlexanderRyanBaggett:请发表一个新的问题。它不适用于这个问题。 –