ActiveXでCoCreateInstanceで作成したインスタンスを
使ってWebの画面を画像化しようとしているのですが
IEを2つ起動している状態で2個目のIEでCoCreateInstanceをすると
なぜか1個目のIEに対してインスタンスを生成している様で
上手くいきませんどなたかこんな現象をご存知の方がいればお教えください。
もしくは以下のコードがIE6では成功するのですが、IE7では失敗してしまいます。
原因をご存知の方がいらっしゃいましたら教えて下さい。
CoCreateInstance(CLSID_InternetExplorer,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWebBrowser2,
(VOID**)&pIE
);
CLSCTX_INPROC_SERVER→CLSCTX_SERVERにするとどうなりますか?
返信が遅くなり申し訳ございません
>CLSCTX_INPROC_SERVER→CLSCTX_SERVERにするとどうなりますか?
CLSCTX_SERVERにした場合は1個目のIEのセッションに
インスタンスが追加されて
2個目のIEのセッションから見れない状況になります。
ググってみるとこんなページを見つけました。
http://www.happy2-island.com/vbs/cafe02/capter00711.shtml
ここの過去ログにもありました。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200902/09020028.txt
XP+IE7 と VISTA+IE8(保護モード有効)の環境では
再現できなかったので未確認です。
VISTA+IE7だけの問題ならIE8にバージョンアップするってのはダメですかね?(^^;
ご回答ありがとうございます。
IE8は現在未対応なので候補から外していました。
上記サイトに載っている方法でインスタンスの取得は出来ました。
ありがとうございます。
しかし、作成したインスタンス(pIE)に対して以下の処理を実行すると
IE6では正常に動作しますがIE7ではOleDrawの結果が真っ黒になってしまいます。
この現象に対してご存知の事がありましたらお教え頂けないでしょうか?
//Document を取得
IDispatch* pDisp;
pIE->get_Document(&pDisp);
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc;
pDoc = pDisp;
// DOCUMENTのIViewObjectを取得
IViewObject* pViewObj;
pDoc->QueryInterface( IID_IViewObject,(void**)&pViewObj );
OleDraw(pViewObj,DVASPECT_CONTENT,dc.m_hDC,&rc );
IE6 と IE7 でどちらも全く同じコードで検証していますか?
CLSCTX_INPROC_SERVER でも成功と書いているあたり、
IE6 で CoCreateInstance に指定しているのは
CLSID_InternetExplorer ではなく CLSID_WebBrowser で
ActiveXコントロールをホストしているのではないかと疑ってしまうのですが。
試してみると IE からだと OleDraw しても E_FAIL が返されて
失敗しました。が、これが環境の問題なのかどうかわかりません。
CLSID_WebBrowser の方でコントロールを作成して描画すると成功しました。
ツイート | ![]() |