タイトル : Re: レイトバインドするとExcelのFindNextオブジェクトが開放できなくなります 投稿日 : 2010/07/14(Wed) 10:56 投稿者 : 魔界の仮面弁士
# この場合は、開放ではなく解放かな…。 > Excelファイル操作用のコードをレイトバインドしてみたのですが 同様の話は、FindNext(Range) メソッド以外でも報告されています。 http://bbs.wankuma.com/index.cgi?mode=al2&namber=29001&KLOG=52 の No29016 http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm の4. > 'Dim myFindNext As Excel.Range = xlCells.FindNext(myRng)←レイトバインド前 > Dim myFindNext As Object = xlCells.FindNext(myRng) '★ アーリーバインドの場合は、変数 myRng の型が Range でしたが、 レイトバインドの場合は Object 型ですよね。 このため、FindNext の処理では内部的に型チェックと Object → Range への 型変換が発生し、恐らくこの段階で参照カウントが増加してしまうのでしょう。 myRng を ReleaseComObject する際に、その戻り値を確認してみてください。 正しく解放されていれば 0 が返されるはずですが、0 以外になっているようなら、 この部分は ReleaseComObject ではなく FinalReleaseComObject で解放した方が安全です。 ちなみにこのようなケースでは、.NET 1.x 当時は、ReleaseComObject を 0 になるまで 繰り返すパターンで解放していたのですが、2.0 以降では、FinalReleaseComObject を 使う事が推奨されています。 もしくは作業用のアプリケーションドメインを作って、最後にアンロードするという手も。 |