tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 を
使う事が推奨されています。


もしくは作業用のアプリケーションドメインを作って、最後にアンロードするという手も。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。