CoCreateInstanceでプロセスを指定して作成するには?


たけ  2009-07-29 00:15:27  No: 70717

ActiveXでCoCreateInstanceで作成したインスタンスを
使ってWebの画面を画像化しようとしているのですが
IEを2つ起動している状態で2個目のIEでCoCreateInstanceをすると
なぜか1個目のIEに対してインスタンスを生成している様で
上手くいきませんどなたかこんな現象をご存知の方がいればお教えください。


たけ  2009-07-29 20:57:26  No: 70718

もしくは以下のコードがIE6では成功するのですが、IE7では失敗してしまいます。
原因をご存知の方がいらっしゃいましたら教えて下さい。

CoCreateInstance(CLSID_InternetExplorer,
    NULL, 
    CLSCTX_INPROC_SERVER,
    IID_IWebBrowser2,
    (VOID**)&pIE
    );


subaru  2009-07-30 05:18:59  No: 70719

CLSCTX_INPROC_SERVER→CLSCTX_SERVERにするとどうなりますか?


たけ  2009-08-05 02:02:29  No: 70720

返信が遅くなり申し訳ございません

>CLSCTX_INPROC_SERVER→CLSCTX_SERVERにするとどうなりますか?
CLSCTX_SERVERにした場合は1個目のIEのセッションに
インスタンスが追加されて
2個目のIEのセッションから見れない状況になります。


subaru  2009-08-05 08:20:02  No: 70721

ググってみるとこんなページを見つけました。
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にバージョンアップするってのはダメですかね?(^^;


たけ  2009-08-06 02:13:03  No: 70722

ご回答ありがとうございます。
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 );


subaru  2009-08-06 19:24:39  No: 70723

IE6 と IE7 でどちらも全く同じコードで検証していますか?

CLSCTX_INPROC_SERVER でも成功と書いているあたり、
IE6 で CoCreateInstance に指定しているのは
CLSID_InternetExplorer ではなく CLSID_WebBrowser で
ActiveXコントロールをホストしているのではないかと疑ってしまうのですが。

試してみると IE からだと OleDraw しても E_FAIL が返されて
失敗しました。が、これが環境の問題なのかどうかわかりません。
CLSID_WebBrowser の方でコントロールを作成して描画すると成功しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加