dll-method (マクロ)
パッケージ: CURL.LANGUAGE.DLL-INTERFACE

シグネチャ

{dll-method [access] [calling-convention] [modifiers] {name [("dll-name")] [args] }:return-type
  [{if-missing missing-body}]
}

DLL インターフェイス メソッドを定義します。

access: メソッドにアクセスできるコードを指定します。通常のメソッドがアクセスする値と同じです。publiclibraryprotectedpackage または private です。既定値は package です。
calling-convention: 外部プロシージャを起動する場合に使用される呼び出し規約です。cdecl または stdcall の 1 つでなければなりません。dll-method を含む define-dll-class の定義が、既定の呼び出し規約を指定し、そのため呼び出し規約を明示的に指定しない任意の dll-method が使用されるとします。それが使用されない場合、呼び出し規約を指定するために、すべての dll-methods が必要になります。
modifiers: 追加修飾子の空白区切りリストです。これらは、通常のメソッドでサポートされているのと同様です。詳細については、method のドキュメントを参照してください。
name: メソッドの名前です。dll-name も参照してください。
dll-name: SharedLibrary にある、プロセスの名前です。メソッドはこのプロセスにバインドされます。指定されていない場合は、name と同じになります。
args:
標準の name:type Curl 引数形式の、入力引数のカンマ区切りリストです。このリストには、一部制限があります。
  • 型宣言は常に必要です。
  • ... は、許可されていません。
  • valid-dll-in-type? によって受け入れられた型、Curl 文字列型 StringStringInterfaceStringBuf 、およびその # 同値に対し、この型には制限があります。Curl 文字列型は、文字列表現型が以下の記載のように指定されている場合のみ許可されます。
キーワード引数は許可されています。ただし、これらの引数は外部プロシージャで位置引数に対応しているため、引数リストの適切な位置にある必要があります。
型が Curl 文字列型の 1 つである場合、ユーザは次の構文を使用して、コンバージョン バッファの表現型と最大長を指定できます。
(rep = CString-type [, max-size = size])
ここで CString-type は、CStringCStringUTF8CStringUTF16、または CStringUTF32 のいずれかです。
StringBuf 引数を渡す場合は、max-size を設定する必要があります。
return-type: プロシージャが返す型です。valid-dll-out-type? で受け取られる必要があります。args と同様に、Curl 文字列型も提供された文字列表現型で受け取られます。
missing-body: dll-name 名のプロセスが共有ライブラリで見つからない場合、実行するコードを含みます。dll-method{if-missing ...} 宣言が存在せず、DLL クラスが初期化されたときに、ライブラリにこのプロセスが見つからない場合、直ちに DynamicLookupException がスローされます。

説明

リモートの DLL または共有ライブラリにおいて、プロシージャのプロキシ メソッドを定義します。dll-method の宣言は define-dll-class の宣言の内部のみで許可されます。他の場所で宣言の使用を試みると、エラーが発生します。
前述の表記の順序には関係なく、accesscalling-convention および modifiers のキーワードをそれぞの順番で配置することができます。

C 言語の strlen 関数に対するパブリック インターフェイスを定義します。
{dll-method public cdecl {strlen s:CString}:int}
呼び出し中にメソッドを利用してCurl 文字列を CString に自動的に変換したい場合は、以下のように記述します。
{dll-method public cdecl {strlen 
                             s:StringInterface (rep = CString)
                         }:int
}
(rep = CString) の宣言は、define-dll-classdefaults 句があり、CString に設定された string-rep があれば、省略することができます。同様に、cdecl を省略することも可能です。ただし、クラスの既定 calling-convention として設定されている場合です。
{define-dll-class public Strlen
  {defaults calling-convention = cdecl, string-rep = CString}
  {dll-method public {strlen s:StringInterface}:int}
}