###前提・実現したいこと
VB.NETアプリケーションからIllustratorを起動し、Illustratorへ図を出力する仕組みを使っていて、そのアプリケーションをWindows10版にすることになりました。
もともと、WindowsXPとIllustratorCSで動作していたもので、
作成者も退職しておりません。
Windows7で動作することは確認しました。
Windows10のPCが複数台あり、それぞれIllustratorをインストールしています。
Windows10は、32bitと64bit
Illustratorは、CS3、CS4、CS6、CCとあり、
それぞれ対応するCOMを参照してアプリケーションを作成しています。
開発用のWindowsPCでは正常にIllustratorが起動し、図が出力できるのですが、本番用のWindowsPCではIllustratorは起動しますが、図の出力でエラーとなります。
解決策、参考情報等、ご存知でしたら教えて頂けないでしょうか?
###発生している問題・エラーメッセージ
下記は、Windows10 32bit と IllustratorCS4の場合に表示されたエラーです。
型 'Illustrator.ApplicationClass' の COM オブジェクトをインターフェイス型
'Illustrator._Application' にキャストできません。
IID '{95CD20AA-AD72-11D3-B086-0010A4F5C335}' が指定された
インターフェイスの COM コンポーネント上での QueryInterface 呼び出しの
ときに次のエラーが発生したため、この操作に失敗しました:
インターフェイスがサポートされていません
(HRESULT からの例外: 0x80004002 (E_NOINTERFACE))。
下記ソースコードのExecのtry-catchでエラーとなっていると思われます。
catchのイラストレータの初期化に失敗しましたのメッセージが
アプリ上に上記のエラーメッセージとともに表示されています。
###該当のソースコード
Private Sub Exec() Dim lblDlg As New SetLabelDelegate(AddressOf setLabel) Dim stsDlg As New SetStatusDelegate(AddressOf setStatus) 'Dim clsDlg As New CloseFrmDelegate(AddressOf closeFrm) Dim btnDlg As New SetBtnDelegate(AddressOf setBtn) Dim tagDlg As New GetLabelTagDelegate(AddressOf getLabelTag) Dim tag As String = "" Dim hdDlg As New HideProgressDelegate(AddressOf hideProgress) Dim actDlg As New ActivateFormDelegate(AddressOf activateForm) Dim before As DateTime = DateTime.Now '処理前 画面処理 Invoke(lblDlg, New Object() {"Adobe Illustrator 起動チェック!"}) Call startIllustrator() 'illustrator初期化 Try 'イラストレータ準備中 Invoke(lblDlg, New Object() {"イラストレータ準備中"}) 'インスタンス化 IllFunc = New IllustrationFunction '画面アクティブ Invoke(actDlg) Catch ex As Exception Invoke(stsDlg, New Object() {"イラストレーターの初期化に失敗しました", ex.Message, True, False}) Invoke(btnDlg, New Object() {"終了", True}) Exit Sub End Try '...省略 End Sub 'Illustrator起動 Private Sub startIllustrator() 'ローカルコンピュータ上で実行されている"Illustrator"という名前の 'すべてのプロセスを取得 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcessesByName("Illustrator") If ps.Length = 0 Then Call System.Diagnostics.Process.Start("Illustrator") Debug.Print("Process.Start" & DateTime.Now) wait(1000) End If End Sub 'Illustrator用クラス Public Class IllustrationFunction : Implements System.IDisposable 'Illustratorオブジェクト群 Private aiApp As Illustrator.Application 'アプリケーション Private aiDoc As Illustrator.Document 'ドキュメント Private aiTemplateDoc As Illustrator.Document 'ドキュメント(テンプレートファイル) Private aiFonts As Illustrator.TextFonts 'フォント群 '色オブジェクト(固定値) Private CMYKWhite As Illustrator.CMYKColor 'CMYKカラーオブジェクト Private CMYKBlack As Illustrator.CMYKColor 'CMYKカラーオブジェクト '現在選択中のオブジェクト群 Private thisLayer As Illustrator.Layer 'レイヤー Private thisText As Illustrator.TextFrame 'テキストフレーム Private thisPath As Illustrator.PathItem 'パス Private thisGroup As Illustrator.GroupItem 'グループ Private tempLayer As Illustrator.Layer 'レイヤー(一時) Private _lastStep As String 'エラー検知用ステップログ Const MM2PT As Double = 2.83464567 'ミリメートルをポイントに変更する際の掛け率 Const PT2MM As Double = 0.352777778 'ポイントをミリメートルに変更する際の掛け率 Private disposed As Boolean ' Track whether Dispose has been called. Private handle As IntPtr ' Pointer to an external unmanaged resource. ''' <summary> ''' Illustratorのオブジェクトを取得する。 ''' </summary> ''' <remarks>使用法:インスタンス化</remarks> Public Sub New() 'Dispose時使用 Me.handle = handle 'コトハジメのアプリケーションオブジェクトとフォントオブジェクトを取得 aiApp = New Illustrator.Application() aiFonts = aiApp.TextFonts '色オブジェクトを設定 CMYKWhite = New Illustrator.CMYKColor() CMYKBlack = New Illustrator.CMYKColor() CMYKWhite.Cyan = 0 CMYKWhite.Magenta = 0 CMYKWhite.Yellow = 0 CMYKWhite.Black = 0 CMYKBlack.Cyan = 0 CMYKBlack.Magenta = 0 CMYKBlack.Yellow = 0 CMYKBlack.Black = 100 End Sub '...省略 End Class
###試したこと
エラーの{95CD20AA-AD72-11D3-B086-0010A4F5C335}をGoogleで検索するとIllustratorCS5関連の情報が表示されたため、PCのインストール状況を確認しましたが、IllustratorCS5はインストールされておらず、IllustratorCS4がインストールされていました。
また、他のIllustratorのversionはインストールされていません。
###補足情報(言語/FW/ツール等のバージョンなど)
開発用のWindows10のPCと本番用のWindows10のPCで、どこかに違いがあるのではないかと考え、調査しているところです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/27 01:05