ForeignFunctionLoad

ForeignFunctionLoad[lib,fun,{argtype1,argtype2,}rettype]

指定された引数と出力型でライブラリ lib から関数 fun をロードする.

ForeignFunctionLoad[ptr,{argtype1,argtype2,}rettype]

関数のポインタ ptr から外部関数を作成する.

詳細

  • ForeignFunctionLoadForeignFunctionオブジェクトを返す.
  • libFindLibraryで解決される.
  • lib はC互換の動的ライブラリでなければならない.
  • サポートされる型は,一般に,Wolfram Compilerがサポートするものと一致する.
  • 次は,使用可能な引数と戻り値の型および対応するCの型である.
  • "UnsignedInteger8"uint8_t符号なし8ビット整数
    "Integer8"int8_t符号あり8ビット整数
    "UnsignedInteger16"uint16_t符号なし16ビット整数
    "Integer16"int16_t符号あり16ビット整数
    "UnsignedInteger32"uint32_t符号なし32ビット整数
    "Integer32"int32_t符号あり32ビット整数
    "UnsignedInteger64"uint64_t符号なし64ビット整数
    "Integer64"int64_t符号あり64ビット整数
    "CUnsignedChar"unsigned charC互換の符号なしchar型
    "CSignedChar"signed charC互換の符号ありchar型
    "CUnsignedShort"unsigned shortC互換の符号なしshort型
    "CShort"shortC互換のshort型
    "CUnsignedInt"unsigned intC互換の符号なしint型
    "CInt"intC互換のint型
    "CUnsignedLong"unsigned longC互換の符号なしlong型
    "CLong"longC互換のlong型
    "CSizeT"size_tC互換のsize_t
    "CFloat"floatC互換のfloat型
    "CDouble"doubleC互換のdouble型
    "OpaqueRawPointer"void*不透明なポインタ
    "RawPointer"::[t]t*型付きポインタ
    {ty1,ty2,}struct {ty1 f1; ty2 f2; }struct型またはproduct型
    "Void"void出力なし(入力型のみ)
  • 構造体あるいは製品の型も"ListTuple"::[ty1,ty2, ]として書くことができる.
  • ForeignFunctionLoad[ptr,]ptr は,ライブラリの有効な関数を指すOpaqueRawPointerでなければならない.

例題

すべて開くすべて閉じる

  (1)

ライブラリから関数をロードする:

関数を呼び出す:

スコープ  (2)

ForeignFunctionLoadFindLibraryを使ってライブラリを見付ける:

FindLibraryでライブラリを見付け,それをForeignFunctionLoadに渡すこともできる:

ライブラリの関数へのポインタを得る:

関数ポインタを使い型を指定して外部関数をロードする:

アプリケーション  (2)

OpenSSLからのRAND_bytes関数について外部関数を作成する:

ランダムなバイトが書き込めるバッファを作成する:

RAND_bytesを呼び出すことでランダムなバイトを生成する:

出力を読む:

関数にパッケージ化する:

この外部関数は大変効率的である:

OpenSSLを使ってSHA256を実装する:

ハッシュするテキストを含むバッファを作成する:

ハッシュを書き込むバッファを作成する:

ハッシュを実行する:

暗号文バッファから結果を読む:

組込み関数のHashと比較する:

関数にパッケージ化する:

パッケージ化した関数は大変効率的である:

特性と関係  (1)

ForeignFunctionLoadは,一般に,カスタムリンクをコンパイルするよりも高速にライブラリへの呼び出し可能なリンクを作成する:

しかし,カスタムにコンパイルしたバージョンの方がオーバーヘッドが少ない:

考えられる問題  (3)

ライブラリが存在しない場合はFailureが返される:

関数が存在しない場合はFailureが返される:

型がサポートされないものの場合,ForeignFunctionLoad$Failedを返す:

Wolfram Research (2023), ForeignFunctionLoad, Wolfram言語関数, https://reference.wolfram.com/language/ref/ForeignFunctionLoad.html.

テキスト

Wolfram Research (2023), ForeignFunctionLoad, Wolfram言語関数, https://reference.wolfram.com/language/ref/ForeignFunctionLoad.html.

CMS

Wolfram Language. 2023. "ForeignFunctionLoad." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/ForeignFunctionLoad.html.

APA

Wolfram Language. (2023). ForeignFunctionLoad. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ForeignFunctionLoad.html

BibTeX

@misc{reference.wolfram_2024_foreignfunctionload, author="Wolfram Research", title="{ForeignFunctionLoad}", year="2023", howpublished="\url{https://reference.wolfram.com/language/ref/ForeignFunctionLoad.html}", note=[Accessed: 05-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_foreignfunctionload, organization={Wolfram Research}, title={ForeignFunctionLoad}, year={2023}, url={https://reference.wolfram.com/language/ref/ForeignFunctionLoad.html}, note=[Accessed: 05-November-2024 ]}