Skip to main content
Participant
May 9, 2025
Answered

COM経由でのオブジェクト走査が不安定

  • May 9, 2025
  • 1 reply
  • 240 views

VB.NETからCOM経由で下記のコードを実行すると不定期にCOMException(an Illustrator error occurred: 1346458189 ('PARM'))が発生します。

Nameプロパティにアクセスしたところで発生することがわかっていますが、UIスレッドを待つためにSLEEPを入れたりApplication.DoEvents()をしてもExceptionが発生してしまいます。

 

この際、他のプロパティもすべてアクセスできず破損しているようなイメージでした、PathItemだけでなくTextFrameでも同様の事象が発生します。

 

現在はDocumentを再度OPENしてリトライすることでプロパティにアクセスできることがわかり対応しましたが、頻発してパフォーマンスに影響しているため他の策がないものでしょうか。

 

Windows11, Adobe Illustrator 2025 29.5.0

 

Dim doc As Illustrator.Document = AI3App.Open(fullFileName, Illustrator.AiDocumentColorSpace.aiDocumentCMYKColor)
 
Dim pageItems As PageItems = doc.PageItems
Dim path As PathItem = Nothing
 
For Each item As Object In pageItems
    If TypeOf item Is PathItem Then
        Dim pathItem As PathItem = CType(item, PathItem)
 
        If pathItem.Name IsNot Nothing Then
...
End If
End If
Next

 

Correct answer Ten A

VBスクリプトから実行するということでしょうか、

単純にスクリプトからのオブジェクト走査は試してみましたがこちらは何度実行してもエラーにななりませんでした。

最終的な手段として.NETからスクリプトを外部呼出しすることで検討していますが、膨大なコードがあるため躊躇しているところです。

CS4で実績のあるコードでして、その後のアップデートで不安定になったようです。

 


繰り返しになるんですけど、IllustratorなどのDTP系のアプリケーションは前提として外部からの操作を想定していません。基本的にスクリプトにしろエクステンションにしろ、操作する人がメニューないしパネルを操作することによって処理を実行する事を想定しています。
.NETに限らず外部からの操作に関しては、しっかり検証もされていないのが現状です。

1 reply

Ten A
Community Expert
Community Expert
May 9, 2025

どのような処理を行なっていますか?

処理によってはオブジェクトモデル上にリストアップされない場合も出てきますから、そう言った場合にPARMエラーが出る可能性があります。

Participant
May 9, 2025

ありがとうございます。

上記コード部分では既存AIファイルを開き、Nameプロパティが特定の文字列のPathItemから位置情報を取得する処理です。

 

document Open -> For Each PageItemsで走査  ->  プロパティアクセス

という流れを行うといずれの箇所でも発生することがあります。

Ten A
Community Expert
Community Expert
May 10, 2025

通常のスクリプトエンジンでの処理を考えるとうまく動く筈の処理なんですけど、基本的にIllustratorの自動処理と言うのは外部からプッシュするためのものでは無いのでCOMオブジェクト経由という点が不安定要因なのかもしれません。

単純にVBAをIllustratorから実行することはできますか?