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

タイトル Re^2: VB2005からPowerPoint2007へのリンク貼付操作
投稿日: 2008/10/02(Thu) 17:53
投稿者アップルティー
> 回答ではありません。何方からもレスがないようなので...。

お忙しいところ、わざわざありがとうございます。

> エラーメッセージをキーに検索されたら、結構同じ事例のようなのがヒット
> しましたので、ご自分の環境等で思い当たる事がないか調べてみてはどうでしょうか?

基本的に調査してどうしようもなかった場合のみ、掲示板に書き込みをしています。
安易な書き込みは極力避けているつもりです。

> バージョンによって動く場合と動かない場合があるのなら、引数の個数や型が
> 代わっていないか確認されてみては。

パラメータについては全部とは言いませんが、多くのパターンを試しております。
しかし、いずれの場合も欲する結果ではありませんでした。

> 又、COMオブジェクトの解放処理等はどのようにされているでしょうか?
> タスクマネージャに沢山残っているという事はありませんか。

タスクマネージャに残っているという現象はありません。

こちらのHPを見て、COMオブジェクトのインスタンスの解放については十分に注意しているつもりです。
また、一例ですが解放処理については以下のようなコード記述を行っております。
(ReleaseObject()メソッドについてはこちらのHPのMRComObject()と同様の処理です。)

''' 対象のスライドのタイトルに値を設定する
Protected Sub SetTitle(ByVal pptSlide As PowerPoint.Slide, ByVal title As String)

    Dim pptShapes As PowerPoint.Shapes = pptSlide.Shapes
    Try
        If pptShapes.HasTitle <> Microsoft.Office.Core.MsoTriState.msoTrue Then Return

        Dim pptShape As PowerPoint.Shape = pptShapes.Title
        Try
            Dim pptTextFrame As PowerPoint.TextFrame = pptShape.TextFrame
            Try
                Dim pptTextRange As PowerPoint.TextRange = pptTextFrame.TextRange
                Try
                    pptTextRange.Text = title
                Finally
                    Me.ReleaseObject(pptTextRange)
                End Try
            Finally
                Me.ReleaseObject(pptTextFrame)
            End Try
        Finally
            Me.ReleaseObject(pptShape)
        End Try
    Finally
        Me.ReleaseObject(pptShapes)
    End Try

End Sub

''' COMオブジェクトの解放をする。
Protected Sub ReleaseObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = True)

    If objCom Is Nothing Then Return

    Try
        If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
            If force Then
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
            Else
                Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
            End If
        End If
    Finally
        objCom = Nothing
    End Try

End Sub

また、COMオブジェクトのメソッドを使用する際、対象のメソッドに戻り値があればそれも取得し上記同様の解放処理を行っております。

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

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