2016-11-04 33 views
1

私はC++に少し慣れています。優しくしてください。IWebBrowser2のインスタンスを取得する方法

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

しかし、CoCreateInstance()を呼び出すと、変数IWebBrowser2を初期化するオブジェクトが返されません。

私は何かが紛失しているのを見るためにいくつかの助けをすることができました。私も何HRESULTリターンをデコードする方法を確認していない

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

は、ここに私のコードです。もしあなたが知っていれば、それも役に立つでしょう。

私はIWebBrowser2 interfaceCoCreateInstanceのドキュメントを見ていました。

+1

たぶん、あなたは ''のCoInitialize(NULL)を呼び出していませんでした。関連するすべてのコードを表示します。ビットとピースは表示しません。 –

+0

ありがとうございました。私はその呼び出しをしなかったし、それは動作しませんでした。それを答えに変えることができれば、私はあなたに信用を与えるでしょう。 –

+1

'CoCreateInstance()'の戻り値を見ていれば、 'CO_E_NOTINITIALIZED'(" CoInitializeは呼び出されていません ")という' 0x800401F0'を返していたことになります。戻り値を無視しないでください! –

答えて

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:新しい質問を投稿してください。この質問には適用されません。 –

関連する問題