- 共有ライブラリのプロシージャの呼び出し。
- 共有ライブラリと Curl の各変数、各クラス間でのデータのやりとり。
- Curl で記述されたコールバック関数をサポート。
- 共有ライブラリに関連付けられたリソースが使われなくなった場合に、共有ライブラリ自体のアンロードを含めた、リソースのクリーンアップを実行。
操作対象のメモリ構造は Curl 以外によっても管理されている可能性があるため、これらの機能を使用することは、本質的に危険です。外部ライブラリ API が、そうした固有の危険性を取り除くわけではありませんが、ある種の誤りを防ぐ点では効果があります。
API は Curl 構文のコレクションを提供しています。これにより、ユーザーは以下のタスクを実行できます。
- 呼び出される一連の共有ライブラリのプロシージャに対応するメソッドの呼び出しとともに、Curl のクラスを指定することにより、共有ライブラリへのインターフェイスを定義します。
- C 言語のデータ構造を、それと対応する、データ型に依存しない Curl の仕様を使って定義します。これらのデータ構造には、標準のスカラー数値型、文字列型、配列型などがあります。
- Curl の各種 API を使用して、任意の構造のフィールドまたは関数のパラメータに対して割り当てられたメモリの値を安全にやり取りします。
- Curl のプロシージャとして任意のコールバック関数を定義します。これらの関数は、特定の呼び出し規約に応じて呼び出されます。
- Curl のクラスのメソッド呼び出しを使用し、共有ライブラリのプロシージャを呼び出します。そして、その結果を通常の Curl コードで利用します。
外部ライブラリを使用するアプレットを開発する場合は、以下のステップを実行します。
- 共有ライブラリについて理解します。
ユーザーは、ライブラリ プロシージャがどのように動作するか理解する必要があります。特に、メモリ、ハンドル、および Curl とライブラリによって共有されている他のリソースについて、メモリの割り当て、解放を行うのがどのプロセスであるか理解するのは、重要です。また、ライブラリがサポートし必要とする文字列表現を知ることも重要です。
- データ型が同一かどうか理解します。
Curl では、標準 C 言語の型と同値の型が多数提供されています。Curl の型は、対応する C 言語の型と完全に一致する必要があります。
注意: ブールと文字列型は直接サポートされていません。これは、基礎となる表現が標準化されていないためです。
- Curl により呼び出されるインターフェイスを設計します。
define-dll-class マクロを使用して、Curl アプレット、またはパッケージに必要なライブラリ機能を実装する一連のプロシージャと、適切な状態を維持するために必要な一連のデータ メンバを収集します。
- やり取りを行う必要があるデータ構造について定義します。
define-C-struct マクロを使用して、対応する C 言語の定義と一致するデータ レイアウトを定義します。必要なフィールドには、基礎となる表現を指定する注釈を付けます。
- ライブラリが呼び出す任意の Curl コールバック関数を定義します。
- グルー コードを記述します。
インターフェイスとデータ構造を配置した後は、ライブラリ関数に渡すデータを操作するためのコードを記述し、ライブラリ関数から返されたデータを使用できるようにします。
注意: define-dll-class マクロがライブラリへのエントリ ポイントをすべてカバーしている必要はありません。含まれていなければならないのは、Curl のコードが明示的に呼び出す各エントリ ポイントのメソッドと、ライブラリが呼び出し処理中に呼び出す場合がある、Curl に実装された各コールバックのメソッドのみです。
ライブラリへのインターフェイスを定義するコードは、実際にライブラリをロードすることなくコンパイルすることができます。
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.