Adobe Readerとの格闘 その1

たまにはWindowsのネタも書いてみようw

とあるシステムでPDFをプログラムの画面内に表示する要件があった。
データベース内のデータとPDFのドキュメントを関連付けて画面上に表示するというもので元々存在しているシステムのアドイン的な位置付け。

構成は以下の通り。

で、一般的にはActiveXコントロールとして画面に貼り付けることを考える訳だけども、色々と問題があったが致命的だったのが以下の二つ。

  1. Adobe Readerがアクティブな状態でTABキーを押下するとアプリケーションエラー
  2. プログラムを終了するときにアプリケーションエラーが発生する

前者は作業時点においては解決策がなく、画面に貼り付けたAdobe Readerを触らせないという方法しかなかった。

  1. Enableプロパティが無いのでコンテナ(FrameコントロールやPictureBoxコントロールなど)内に配置してコンテナのEnableプロパティをFalseに...

(現在はAdobe Reader 9.4により解消)

また、後者についてはGoogle先生に聞いたら答えが載っていたもののやってみても回避できなかった。
# MSDNのフォーラムにC#を使用している場合で解決したというスレッドが。

  1. WebBrowserコントロール(IE)によりPDFを表示
  2. 閉じる前に"about:blank"をNavigate
  3. CoFreeUnusedLibraries関数を呼び出す

一旦元に戻し、ミニマム構成で試すと単独のEXEの場合は発生せず、ActiveX dllにしたものを使用すると発生していたので試しにActiveX EXEにしてみると発生しなかった。
ところが、Windows7で動かすと画面の表示すらできない状態にorz
# メモリが足りないと言われる
# アドイン未使用時のダミープログラムでは発生しないのでActiveX EXEだからダメという訳でも...

またフリダシか...

Adobe Readerとの格闘 その2