外部ライブラリ

Curl® の外部ライブラリ API には、CURL.LANGUAGE.DLL-INTERFACE パッケージおよび SharedLibrary クラスが含まれています。この API は、Curl の特権アプレットが Curl ランタイム以外にホスト プラットフォーム 機能を使用するためのメカニズムを提供します。SharedLibrary クラスは外部ライブラリへの低水準インターフェイスを提供します。この API は、以下の機能を実行する正しい Curl コードが記述しやすように作られています。
操作対象のメモリ構造は Curl 以外によっても管理されている可能性があるため、これらの機能を使用することは、本質的に危険です。外部ライブラリ API が、そうした固有の危険性を取り除くわけではありませんが、ある種の誤りを防ぐ点では効果があります。
API は Curl 構文のコレクションを提供しています。これにより、ユーザーは以下のタスクを実行できます。
外部ライブラリを使用するアプレットを開発する場合は、以下のステップを実行します。
  1. 共有ライブラリについて理解します。
    ユーザーは、ライブラリ プロシージャがどのように動作するか理解する必要があります。特に、メモリ、ハンドル、および Curl とライブラリによって共有されている他のリソースについて、メモリの割り当て、解放を行うのがどのプロセスであるか理解するのは、重要です。また、ライブラリがサポートし必要とする文字列表現を知ることも重要です。
  2. データ型が同一かどうか理解します。
    Curl では、標準 C 言語の型と同値の型が多数提供されています。Curl の型は、対応する C 言語の型と完全に一致する必要があります。
    注意: ブールと文字列型は直接サポートされていません。これは、基礎となる表現が標準化されていないためです。
  3. Curl により呼び出されるインターフェイスを設計します。
    define-dll-class マクロを使用して、Curl アプレット、またはパッケージに必要なライブラリ機能を実装する一連のプロシージャと、適切な状態を維持するために必要な一連のデータ メンバを収集します。
  4. やり取りを行う必要があるデータ構造について定義します。
    define-C-struct マクロを使用して、対応する C 言語の定義と一致するデータ レイアウトを定義します。必要なフィールドには、基礎となる表現を指定する注釈を付けます。
  5. ライブラリが呼び出す任意の Curl コールバック関数を定義します。
    CdeclCallback-to または StdcallCallback-to クラスを使用して、コールバックに適した呼び出し規約を示します。
  6. グルー コードを記述します。
    インターフェイスとデータ構造を配置した後は、ライブラリ関数に渡すデータを操作するためのコードを記述し、ライブラリ関数から返されたデータを使用できるようにします。
注意:
define-dll-class マクロがライブラリへのエントリ ポイントをすべてカバーしている必要はありません。含まれていなければならないのは、Curl のコードが明示的に呼び出す各エントリ ポイントのメソッドと、ライブラリが呼び出し処理中に呼び出す場合がある、Curl に実装された各コールバックのメソッドのみです。
define-dll-class マクロは、複数のライブラリに対し、1 つのインターフェイスを実装することもできます。define-dll-class マクロを使用して、複数のライブラリへの呼び出しを Curl で見られるような 1 つのクラスに組み合わせることも可能です。
ライブラリへのインターフェイスを定義するコードは、実際にライブラリをロードすることなくコンパイルすることができます。