2016-11-04 3 views
1

Ich bin ein wenig neu in C++, bitte sei sanft.Wie bekomme ich eine Instanz von IWebBrowser2

Ich versuche, Internet Explorer zu automatisieren. Ich habe eine einfache Win32-Konsole-Anwendung, wo ich versuche, eine Instanz von IE mit einem lokalen Server zu erstellen.

Allerdings gibt mein Aufruf an CoCreateInstance() kein Objekt zurück, um meine IWebBrowser2 Variable zu initialisieren.

Ich könnte Hilfe verwenden, um zu sehen, was ich vermisse.

Hier ist mein Code:

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); 
} 

Ich bin auch nicht sicher, wie zu entschlüsseln, was die HRESULT zurückkehrt. Wenn Sie wissen, wäre das auch hilfreich.

Ich schaute auf Dokumentation auf IWebBrowser2 interface und CoCreateInstance.

+1

Vielleicht haben Sie nicht rufen 'CoInitialize (NULL)'. Zeigen Sie alle relevanten Code, nicht Bits und Stücke. –

+0

Danke, das hat es funktioniert. Ich habe diesen Anruf nicht getätigt und es hat nicht funktioniert. Wenn Sie das zu einer Antwort machen können, werde ich Ihnen Kredit geben. –

+1

Hätten Sie sich den Rückgabewert von 'CoCreateInstance()' angesehen, hätten Sie gesehen, dass es '0x800401F0', auch bekannt als' CO_E_NOTINITIALIZED' zurückgegeben hat ("CoInitialize wurde nicht aufgerufen"). Ignorieren Sie die Rückgabewerte nicht! –

Antwort

0

Bevor Sie COM-Objekte verwenden, müssen Sie CoInitialize() aufrufen.

Sie müssen auch SysAllocString() verwenden, um die Zeichenfolge zuzuweisen.

Beispiel:

#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

Kannst du mir helfen, einen BSTR in VARIANT zu konvertieren oder einen Variant mit einer Zeichenfolge zu initialisieren? –

+0

@AlexanderRyanBaggett: Bitte posten Sie eine neue Frage dazu. Es gilt nicht für diese Frage. –

Verwandte Themen