VB 6.0でDLLを作成する場合に、「対話型インターフェイスの抑制」と「メモリに保持」オプションを指定することができません。
対象製品
ActiveReports 2.0J Professional
詳細
ActiveReportsのレポートエンジンDLLはActiveXデザイナであり、内部に対話型インターフェイスの要素を含んでおります。そのため、プロジェクトにデザイナ(DSRファイル)を含んでActiveX DLLを作成する場合、プロジェクトのプロパティで「対話型インターフェイスの抑制」オプションを指定することができません。また、VB 6.0の仕様上、「対話型インターフェイスの抑制」を指定しない場合には、「メモリに保持」オプションを指定することができません。
(これらの制限は、VB 6.0付属のData Reportにおいても、同様となっております。)
上記のオプションが指定できないため、作成したDLLをIIS上でCOM+アプリケーションとして使用した場合に、下記のような問題が発生する可能性があります。
[VB6] [メモリに保持] オプションがオフの場合の問題
Visual Basic 6.0 ActiveX コンポーネントでのスレッディングに関する問題
Visual Basic DLL プロジェクトのプロパティを構成し、IIS、MTS、または COM+ で実行する方法
[HOWTO] IIS コンポーネントを作成するための Visual Basic プロジェクト テンプレートを作成する方法
[INFO] ASP で実行する Visual Basic コンポーネントの設計ガイドライン
※上記ページ([メモリに保持] オプションがオフの場合の問題)にて、「多くのマルチスレッド化に関する問題と同様、この現象は極めて限定された、一時的な状態でのみ発生します。」と説明がありますように、この現象は特殊な条件下で発生する問題です。
ActiveReportsはサーバーサイドアプリケーションとしての動作を保証しておりますが、サーバー上で動作させるDLLのプロジェクトにレポートデザイナを含んだ場合には、ActiveReportsの仕様上、前述の2つのオプションをオンにすることができないため、現状では仕様上の制限とさせていただいており、下記のような方法で回避できない場合は、運用面(同時にアクセスできるクライアント数に制限を設ける等)で対処していただく以外に方法はありません。
[IIS] HOWTO: Internet Information Services での CPU 使用率が高い "ハング" 状態のトラブルシューティング
[BUG] VB で作成したコンポーネントをマルチスレッド環境で実行するとアクセス違反が発生する
しかしながら、ActiveReports 2.0Jにおきましては、レポートのデザイン情報をXML形式のRPXファイルとして保存し、実行時にRPXファイルを読み込んでレポートを生成することが可能となっております。
この方法の場合、ActiveX DLLのプロジェクト内にActiveReportsのデザイナ(ActiveXデザイナ)を含める必要が無く、「対話型インターフェイスの抑制」および「メモリに保持」オプションを指定してDLLを作成することが可能となります。
(RPXファイルを使用してレポートを生成する場合、DSRファイルに記述していたコードは、スクリプトとして記述することになります。)
下記のサンプルにて、上記の方法でレポートを作成しておりますので、こちらの方をご参照ください。
¥Samples¥ProWeb
また、下の「関連情報」にて、Dsr形式のレポートをRPX形式に変更する手順に関する文書をご案内しております。こちらの方もあわせてご参照ください。
(これらの制限は、VB 6.0付属のData Reportにおいても、同様となっております。)
上記のオプションが指定できないため、作成したDLLをIIS上でCOM+アプリケーションとして使用した場合に、下記のような問題が発生する可能性があります。
[VB6] [メモリに保持] オプションがオフの場合の問題
Visual Basic 6.0 ActiveX コンポーネントでのスレッディングに関する問題
Visual Basic DLL プロジェクトのプロパティを構成し、IIS、MTS、または COM+ で実行する方法
[HOWTO] IIS コンポーネントを作成するための Visual Basic プロジェクト テンプレートを作成する方法
[INFO] ASP で実行する Visual Basic コンポーネントの設計ガイドライン
※上記ページ([メモリに保持] オプションがオフの場合の問題)にて、「多くのマルチスレッド化に関する問題と同様、この現象は極めて限定された、一時的な状態でのみ発生します。」と説明がありますように、この現象は特殊な条件下で発生する問題です。
ActiveReportsはサーバーサイドアプリケーションとしての動作を保証しておりますが、サーバー上で動作させるDLLのプロジェクトにレポートデザイナを含んだ場合には、ActiveReportsの仕様上、前述の2つのオプションをオンにすることができないため、現状では仕様上の制限とさせていただいており、下記のような方法で回避できない場合は、運用面(同時にアクセスできるクライアント数に制限を設ける等)で対処していただく以外に方法はありません。
[IIS] HOWTO: Internet Information Services での CPU 使用率が高い "ハング" 状態のトラブルシューティング
[BUG] VB で作成したコンポーネントをマルチスレッド環境で実行するとアクセス違反が発生する
しかしながら、ActiveReports 2.0Jにおきましては、レポートのデザイン情報をXML形式のRPXファイルとして保存し、実行時にRPXファイルを読み込んでレポートを生成することが可能となっております。
この方法の場合、ActiveX DLLのプロジェクト内にActiveReportsのデザイナ(ActiveXデザイナ)を含める必要が無く、「対話型インターフェイスの抑制」および「メモリに保持」オプションを指定してDLLを作成することが可能となります。
(RPXファイルを使用してレポートを生成する場合、DSRファイルに記述していたコードは、スクリプトとして記述することになります。)
下記のサンプルにて、上記の方法でレポートを作成しておりますので、こちらの方をご参照ください。
¥Samples¥ProWeb
また、下の「関連情報」にて、Dsr形式のレポートをRPX形式に変更する手順に関する文書をご案内しております。こちらの方もあわせてご参照ください。
関連情報
キーワード
問題 Web
この文書は、以前は次のFAQ IDで公開されていました : 3438