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

タイトル Re^5: PowerPointのオブジェクト開放ができません
投稿日: 2009/08/27(Thu) 19:56
投稿者camputer
 Hongliang 様

 どうもありがとうございます!下のコードでSlideもShapeも解放することができました!^^
            mySlides = myPre.Slides
            Dim mySlidesNum As IEnumerator = mySlides.GetEnumerator()
            While mySlidesNum.MoveNext()
                Dim mySlide As Object = mySlidesNum.Current

                myShapes = mySlide.Shapes
                Dim myShapesNum As IEnumerator = myShapes.GetEnumerator()
                While myShapesNum.MoveNext()
                    Dim myShape As Object = myShapesNum.Current

                    MRComObject(myShape)
                End While
                Dim obj3 As Object = TryCast(myShapesNum, ICustomAdapter)
                Dim obj4 As Object = obj3.GetUnderlyingObject
                MRComObject(obj3) : obj3 = Nothing
                MRComObject(obj4) : obj4 = Nothing
                MRComObject(myShapesNum) : myShapesNum = Nothing
                MRComObject(myShapes) : myShapes = Nothing

                MRComObject(mySlide)
            End While
            Dim obj1 As Object = TryCast(mySlidesNum, ICustomAdapter)
            Dim obj2 As Object = obj1.GetUnderlyingObject
            MRComObject(obj1) : obj1 = Nothing
            MRComObject(obj2) : obj2 = Nothing
            MRComObject(mySlidesNum) : mySlidesNum = Nothing
            MRComObject(mySlides) : mySlides = Nothing
            'MRComObject(mySlides) : mySlides = Nothing'←この行は必要でしょうか??

 勘違いしているかもしれないのですが,前のコメントで教えていただいた
>・mySlides が追加で 1 つ
>増えることになります。
については,MRComObject(mySlides) : mySlides = Nothingを2回やる必要があるのでしょうか?
上のコードでいろいろテストしておりますと,今回は一回やるだけで何故か解放できたのですが,
そもそもReleaseComObject で解放する必要がある参照が増えているとわかっているのであれば,
今回の状況で解放できたからといって,むやみにコメントアウトしない方が
いいのかな?などと考えております.
 また,以前Excelで同様に↓のようなコードを書いたときはExcel.EXEが残らなかったのですが,
For Each mySheet In mySheets
Next
こちらについてもきちんと今回教えていただいたような書き直しておく方が無難でしょうか?
 現在,チーム内の事務仕事を効率化するためのアプリを作成中でございますが,
他の人のPCで起動したときなどにエラーが出る可能性を懸念しております.
徹底的に解放されやすいコードにしておくものなのでしょうか???
(今回教えていただいたような事もそうでしたが,VBなどのオブジェクト思考Prog.は,
他の計算Prog.などと違い,裏でどのような動きをしているのかまったく見当がつきません...)


 度々の質問で申しわけございませんが,今回Hongliang様に聞いておかないと,
今後ずっと間違った認識のままコーディングしそうです...
 お時間のある時に是非ともアドバイスいただきたくお願い申しあげます.
 どうぞよろしくお願いいたします.

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

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