タイトル : Re^4: PowerPointのオブジェクト開放ができません 投稿日 : 2009/08/27(Thu) 16:07 投稿者 : Hongliang
> Dim enumerator As IEnumerator = mySlides.GetEnumerator() > While enumerator.MoveNext() > Dim mySlide As Object = enumerator.Current > Dim obj As Object = TryCast(enumerator, ICustomAdapter) > Dim obj2 As Object = obj.GetUnderlyingObject > MRComObject(mySlide) > MRComObject(obj) > 'MRComObject(obj2) > End While enumerator の実体が 1 つ、解放すべき「COM への参照」を持っています。 キャストしても別に enumerator が増えるわけではなくインターフェイスが変わるだけなので、別に COM への参照は増えません。 そもそも実際に COM への参照を持っているのは GetUnderlyingObject で取得したオブジェクトですし。 で、While 文によって何回か中の節が呼び出されるわけです。 このままだと呼び出されただけ enumerator が COM への参照を解放してしまいます。 でも、解放すべき COM への参照は最初に言ったとおり 1 つだけです。 要するに enumerator が持つ COM への参照の解放は While が終わった後に 1 回行うだけでいいってことです。 |