更新履歴 download
下がIEツールバーを破棄しているコードですが、Release()部分をコメントアウトするとpure〜〜が発生しなくなります。googleツールバーはAddRef()、Release()でカウントがinc/decとなるのでちゃんとした参照カウントを返しています。さらに下のRelease()後の値は0だったので、最後のRelease()だと分かります。
IDeskBand* pBand = (IDeskBand*)rbi.lParam;
if(pBand)
{
pBand->CloseDW(0);
if(S_OK == pBand->QueryInterface(__uuidof(pObjectWithSite), (void**)&pObjectWithSite))
{
pObjectWithSite->SetSite(NULL);
pObjectWithSite->Release();
}
pBand->Release(); ← ここをコメントアウトすると、発生しなくなる
}
そこで、Release()するタイミングをどうにかする対応としました。
よく考えると、
・IE6は1プロセス、プロセス終了でツールバーも破棄、プロセス終了
・IE7は1タブに1スレッド、1タブ終了でツールバーも破棄、スレッド終了
・IE8は1タブに1プロセス、1タブ終了でツールバーも破棄、プロセス終了
・Anciaは、複数タブに1スレッド、1タブ終了で、ツールバー破棄、スレッド継続
と、Anciaでは1スレッドの処理内で何度もツールバー作成/破棄が行われるため、若干動作モードが異なります。これがエラー原因に関係しているかもしれません。
まともに対応するとなるとマルチプロセスでしょうか。。
IEツールバーが破棄されないバグがあり、対応したのでAnciaのプロセスが残ることがもうないと思います。
この投稿を読む