ForeignFunctionLoad

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

从库 lib 加载具有指定参数和输出类型的函数 fun.

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

根据函数指针 ptr 创建外部函数.

更多信息

  • ForeignFunctionLoad 返回一个 ForeignFunction 对象.
  • 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 char与 C 兼容的 unsigned char
    "CSignedChar"signed char与 C 兼容的 signed char
    "CUnsignedShort"unsigned short与 C 兼容的 unsigned short
    "CShort"short与 C 兼容的 short
    "CUnsignedInt"unsigned int与 C 兼容的 unsigned int
    "CInt"int与 C 兼容的 int
    "CUnsignedLong"unsigned long与 C 兼容的 unsigned long
    "CLong"long与 C 兼容的 long
    "CSizeT"size_t与 C 兼容的 size_t
    "CFloat"float与 C 兼容的 float
    "CDouble"double与 C 兼容的 double
    "OpaqueRawPointer"void*不透明指针
    "RawPointer"::[t]t*类型化指针
    {ty1,ty2,}struct {ty1 f1; ty2 f2; }构造或 product 类型
    "Void"void没有输出(仅在输出类型中)
  • 构造或 product 类型也可被写为 "ListTuple"::[ty1,ty2, ].
  • ForeignFunctionLoad[ptr,funTy] 中,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 语言. 2023. "ForeignFunctionLoad." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/ForeignFunctionLoad.html.

APA

Wolfram 语言. (2023). ForeignFunctionLoad. Wolfram 语言与系统参考资料中心. 追溯自 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 ]}