Skip to main content
SayMiwa
Participant
March 7, 2018
質問

Visual Studio からのCOMオブジェクト呼び出し

  • March 7, 2018
  • 返信数 1.
  • 14107 ビュー

Win7 + Visual Studio 2015  + InDesign CS6 のときには

InDesign.Application inddApp = (InDesign.Application)Activator.CreateInstance(Type.GetTypeFromProgID("Indesign.Application"));

が成功してinddAppに情報を収録できるのですが、 Win10 + Visual Studio 2015  + InDesign CS6 や Win10 + Visual Studio 2015  + InDesign CC(2018)のときは

「追加情報:型 'System.__ComObject' の COM オブジェクトをインターフェイス型 'InDesign.Application' にキャストできません。IID '{ABD4CBB2-0CFE-11D1-801D-0060B03C02E4}' が指定されたインターフェイスの COM コンポーネント上での QueryInterface 呼び出しのときに次のエラーが発生したため、この操作に失敗しました: インターフェイスがサポートされていません (HRESULT からの例外:0x80004002 (E_NOINTERFACE))。」

となります。

どうしたら、InDesign.Applicationを取得できるのか、どなたか教えてください。

よろしくお願いいたします。

    このトピックへの返信は締め切られました。

    返信数 1

    Omachi
    Legend
    March 7, 2018

    CS6については、次のページの最後の方を確認してください。

    参照設定でエラーが出る場合の対処法

    これに加えて、バージョンを8.1に上げている場合は

    C:\ProgramData\Adobe\InDesign\Version 8.0-J\ja_JP\Scripting Support\8.0\Resources for Visual Basic.tlb

    のSupport\のあとの8.0が8.1になっているはずですのであわせて確認してください。

    CC2018で同様のトラブルには遭遇したことがないのですが、

    レジストリの

    \HKEY_CLASSES_ROOT\TypeLib\{76D0151D-8121-4BB3-9B29-4D137776EE97}\1.0\0\win32

    のパスが正しいか確認してください。

    SayMiwa
    SayMiwa作成者
    Participant
    March 8, 2018

    Omachiさん

    情報提供ありがとうございます。

    紹介いただいたページは既に閲覧済みでtlbの参照は成功しています。

    まだ、検証の途中ですがWin10 + Visual Studio 2015  + InDesign CC(2018)で成功したので皆さんに紹介しておきます。

    キャストができない理由はもっと深い(?別のレジストリキーとか)ところに原因があったようです。

    提供した情報が不足していて申し訳なかったのですが、正常に稼働していた Win7 + Visual Studio 2015  + InDesign CS6 の InDesignは Adobe Creative Cloud経由のインストールではありませんでした。今行っているのはAdobe Creative Cloud経由のインストールで、個人的にはUACが働かなく「大丈夫なのかな?」と思っておりました。

    UACを無効にしてAdobe Creative Cloud経由のインストールをしたところ期待通りにキャストできるようになりました。

    UACを有効にしているユーザーがAdobe Creative Cloud経由でインストールした場合、InDesignのアプリは起動するものの、どこかで不整合が発生しているかもしれません。

    各人の自己責任でお願いしますが、一旦UACを無効にしてインストールするとレジストリへ必要な情報が書き込まれるはずです。

    SayMiwa
    SayMiwa作成者
    Participant
    March 21, 2018

    自己レスです。Visual Studio Community 2017でも試しましたが、駄目でした。


    経験則だけで情報をお伝えします(いろいろと書きましたが試す場合は自己責任でお願いいたします)。

    CS6をAdobe Creative Cloud経由でインストールしたときキャストができないことがありました。当然ですが、いつものレジストリは修正済みです。ですが、Adobe Creative Cloudで更新情報が表示されたのでアップデート(もちろんUACは解除済み)を実施したらキャストできるようになりました。

    それから最近のWindowsソフトは「ソフトインストールしても再起動は不要」というものが多いですが、私は不具合が起きたときとかは必ずOSの再起動をします。

    また、釈迦に説法になるかと思いますが、VSの参照設定は設定時にファイル内容を読み込んでいるようですのでInDesignを再インストールしたときには再設定するようにしています。参照設定を削除してcom参照を追加ですね。

    それから、Interop.InDesign.dllが作成されているのならば削除して新しくCreateされるようにしています。

    VSの再インストールしたようですが、VSのプロジェクトが古いままだったら参照設定やInteropファイルは古いままなのでは?

    あと、プロジェクトのクリーンも試してみてください。ただ、他のDLLも再作成されると思うのでファイル日付け管理している場合にはお気を付けください。

    我流の勝利への法則ですが、

    ・UAC無効でInDesignアンインストール。このとき環境設定は残さない(すみません、勉強不足なので環境設定を残すメリットを知りません)。

    ・OSを再起動

    ・UAC無効でInDesignインストール

    ・OSを再起動

    ・更新プログラムがある場合はUAC無効で更新プログラム適用/適用後OS再起動 ← 更新プログラムがなくなるまで繰り返し

    ・VS プロジェクトフォルダ内のInterop.InDesign.dllを削除。obj/Debugとかobj/Releaseとかにいると思います。ファイル検索した方が早いかも。

    ・VS プロジェクトのInDesign参照を削除

    ・InDesign参照を追加(再設定)。このときInDesignのcomタイプライブラリが複数表示されている場合はパスがProgramDataの方を選択。または直接ProgramDataのファイルを参照し参照追加。

    私はこんな感じで対処します。あ、私はVSを管理者権限で起動しています。かなり昔ですがMS社員から勧められたので。