9.52 DLL
注意: 9.1 組み込み関数の規則 利用オプション
標準DLL(Dynamic Link Library:動的リンク・ライブラリ)オブジェクト内の処理をLANSAコンポーネントやファンクションから呼び出すことができます。
これは、オペレーティング・システムのDLLエントリー・ポイントへの汎用的なインターフェースです。特殊な要件に対して、このインターフェースは最適ではない場合もあります。特殊な要件の場合、独自の組み込み関数の作成を検討してください。この機能の詳細については、『LANSA アプリケーション設計ガイド』の「独自の組み込み関数の作成」を参照してください。
引数
番号
|
タイプ
|
必須/任意
|
記述
|
最小長
|
最大長
|
最小小数桁数
|
最大小数桁数
|
1
|
A
|
必須
|
呼び出されるDLLの別名
|
1
|
32
|
|
|
2
|
A
|
必須
|
呼び出されるファンクションの別名(エントリー・ポイントなど)
|
1
|
32
|
|
|
3 - 20
|
X
|
任意
|
DLLエントリー・ポイントに渡すユーザー定義の実引数または論理引数
|
1
|
無制限
|
|
|
|
戻り値
番号
|
タイプ
|
必須/任意
|
記述
|
最小長
|
最大長
|
最小小数桁数
|
最大小数桁数
|
1
|
A
|
必須
|
戻りコード
OK:正常終了した
ER:エラーが検出された
|
2
|
2
|
|
|
2
|
A
|
任意
|
エラー・メッセージ・テキスト
|
1
|
256
|
|
|
3 - 20
|
X
|
任意
|
DLLエントリー・ポイントからのユーザー定義の実戻り値または論理戻り値
|
1
|
無制限
|
|
|
|
技術上の注記
- 明白に記述しておかなければならないことがあります。この組み込み関数を使用すると、ファンクションはオペレーティング・システムに依存することになります。
アプリケーション構築者はこのこと関してすべての責任を負います。この組み込み関数を使って行うすべての作業は、どのような方法を使っても異なるオペレーティング・システム間で(同じオペレーティング・システムの異なるバージョン間でさえ)移動できることを明示的にも暗黙的にも保証するものではありません。
- DLL の別名およびエントリー・ポイントの別名は英数字リテラルで指定する必要があります。コンパイル時に指定したものが判別できるようにする必要があるためです。
- DLL を使用するには、そのDLLを X_LANSA\SOURCEディレクトリのX_USEDLL.DATに定義する必要があります。このファイルは、DLLとそのエントリー・ポイントの詳細情報を提供するもので、別名と実名をマッピングします。別名と実名を使うことで以下の利点があります。
- RDML ファンクションと実DLLの間をあるレベルで分離することができます。例えば、RDMLファンクションのコードを変更することなく、使用する実DLLの名前を変更することができます(ただし実名は、生成されたCプログラム内で参照されるため、再コンパイルする必要があります)。
- RDML プログラムが容易に読めるようになります。例えば、Crystal ReportsのDLLは「CRPE」という名前ですが、RDMLプログラムの中で「CrystalReports」という別名を使用すれば、RDMLプログラムが一層理解しやすくなります。エントリー・ポイントにも同様の考え方が適用されます。
X_USEDLL.DAT定義ファイル
X_USEDLL.DAT定義ファイルには、DLL組み込み関数が使用できる全DLLの特性が定義されています。このファイルを作成または変更する前に、またはこの組み込み関数を使用する前に、以下のことを理解しておく必要があります。
- これは任意のファイルです。使用する場合は、X_LANSA\SOURCEディレクトリに入れておく必要があります。
- このファイルは、プログラムを生成する時の開発環境だけで必要(使用される)なものです。したがって、このファイルの内容を変更した場合、その変更の影響を受けるDLLを使用しているRDMLファンクションは、(再)生成と(再)コンパイルが必要になる場合があります。
- 256 個を超えるエントリー・ポイントをDLLに定義することはできません。
- これは、単純なキーワード定義形式のファイルで、ほとんどのソース・エディターで編集することができます。ファイルには一連のキーワードが配置されています (キーワードは行の1カラム目から始める必要があり、1行に1つのキーワードだけを指定できます)。
キーワード
|
意味
|
*
|
コメント行
|
DLLNAM=
|
実際の(オペレーティング・システム・レベルの)DLLファイル名。識別子は除外します。
|
DLLALS=
|
RDMLファンクションで使用するこのDLLの別名。指定可能な最大文字数は32です。この名前は定義ファイル内でユニークにする必要があります。大文字と小文字は区別されません。DLLNAM=は、DLLALS=に先行する必要があります。
|
ENTNAM=
|
実際の(オペレーティング・システム・レベルの)DLLエントリー・ポイント名。ほとんどのオペレーティング・システムで、この名前の大文字と小文字は区別されません。この名前は現在のDLL定義内でユニークにする必要があります。
|
ENTALS=
|
RDMLファンクションで使用するDLLエントリー・ポイントの別名は、最大32桁の文字を指定することができます。この名前は現在のDLL内でユニークにする必要があります。大文字と小文字は区別されません。ENTNAM=は、ENTALS=に先行する必要があります。
|
ENTSKL=
|
DLLエントリー・ポイントの実行に必要なCプログラムを定義するスケルトン・ファイルの名前 (識別子を含む)を指定します。このプログラムは、DLLエントリー・ポイントを呼び出すCプログラムを生成するためのテンプレートとして使用されます。このテンプレートを作成する方法については、付属のサンプル/例の十分なコメントが記された例を参照してください。テンプレート・ファイルはすべて、X_LANSA\SOURCEディレクトリに入れておく必要があります。ENTNAM=は、ENTSKL=に先行する必要があります。
|
|
このファイルの内容については、以下の例を検討してください。
* --------------------------------------------------
* Example of defining Crystal Report DLL entry points
* ---------------------------------------------------
DLLNAM=CRPE
DLLALS=CrystalReports
*
ENTNAM=PEOpenEngine
ENTALS=OpenEngine
ENTSKL=CRPE0001.S
*
ENTNAM=PECloseEngine
ENTALS=CloseEngine
ENTSKL=CRPE0002.S
*
ENTNAM=PEPrintReport
ENTALS=PrintReport
ENTSKL=CRPE0003.S
*
ENTNAM=PEGetVersion
ENTALS=GetVersion
ENTSKL=CRPE0004.S
この例は、CRPEという名前のCrystal ReportsのDLLを定義したものです。この例では、OpenEngine、CloseEngine、PrintReport、GetVersion という4つのエントリー・ポイントの別名があります。このDLLとエントリー・ポイントを呼び出すスケルトン/テンプレート・プログラムは、それぞれ...\X_LANSA\SOURCEディレクトリのファイルCRPE0001.S、CRPE0002.S、CRPE0003.S、およびCRPE0004.Sに入っています。スケルトン・プログラムには、DLLをロードする方法、実エントリー・ポイントの名前、組み込み関数の引数とエントリー・ポイントの引数をマッピングする方法、戻りコードと戻り値の処理方法などが定義されています。
独自のスケルトン・ファイル/テンプレートを設定する場合は、以下のガイドラインに従ってください。
- 付属の例をコピーして開始ポイントとして使用します。
- ファイルは必ず....\X_LANSA\SOURCEディレクトリに置いてバックアップ・コピーをとるようにします。
- 識別子に.Sを使用してはいけません。これは予約された識別子で、Visual LANSA導入/アップグレード手順の際に、独自に出荷されたスケルトンであると識別され置き換えられてしまいます。ファイルに.S識別子を使用すると、そのファイルは次の導入/アップグレード時に削除されます。
アプリケーションを正常に実行するために、DLLをX_LANSA/EXECUTEディレクトリにコピーすることが必要になる場合があります。例えば、CRPE32.DLLは、X_LANSA/EXECUTEディレクトリへのコピーが必要です。
実際の開発サイトで、この組み込み関数の引数を実DLLエントリー・ポイントの引数にマッピングするための規則について決定しておく必要があります。採用する規則は、DLLの各エントリー・ポイントに関連するスケルトン/テンプレート・プログラムに実装します。
用意されているスケルトン/テンプレート・ファイルは、特に以下の要件に対応するために使用されました。
- 呼び出し元から渡されなかった引数に対する可変引数リストおよびデフォルト
- 新しい引数や戻り値を、DLLエントリー・ポイントの既存の呼び出し元を修正・再コンパイルする必要なく、いつでも追加できる機能
- すべての呼び出し規則とポインター変換要件を処理でき、かつ1つのインターフェースで複数のオペレーティング・システムに対応できる機能
- RDML レベルのプログラム・インターフェースから複雑なDLLロードやエントリー・ポイントの解決を見えなくする機能
- LANSA RDML言語を使用する高度なプログラミングに適したパフォーマンス
例えば、Crystal Reportsのエントリー・ポイントでは以下のパラメータと戻り値の規則が出荷時の形式として採用されています。
DLL別名
|
エントリー・ポイント
|
別名
|
引数と戻り値
|
CrystalReports
|
OpenEngine
|
Ret 1
|
戻りコード。OKまたはERが戻される。任意
|
CrystalReports
|
CloseEngine
|
Ret 1
|
戻りコード。OKまたはERが戻される。任意
|
CrystalReports
|
PrintReport
|
Arg 3
|
レポート名。必須。指定がない場合はデフォルトとしてNull文字列が使用され、「見つかりません」のエラーとなる
|
Arg 4
|
プリント・レポート・オプション。任意。YまたはNを指定する。デフォルトはY
|
Arg 5
|
ウィンドウ表示オプション。任意。YまたはNを指定する。デフォルトはN
|
Arg 6
|
ウィンドウ・タイトル。任意デフォルトはNull文字列
|
Ret 1
|
戻りコード。OKまたはERが戻される
|
CrystalReports
|
GetVersion
|
Ret 1
|
戻りコード。OKまたはERが戻される。任意
|
Ret 2
|
メジャー・バージョン番号。任意
|
Ret 3
|
マイナー・バージョン番号。任意
|
|