当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R getNativeSymbolInfo 获取一个或多个本机 (C/Fortran) 符号的说明


R语言 getNativeSymbolInfo 位于 base 包(package)。

说明

这会查找并返回一个或多个动态加载或‘exported’内置本机符号的说明。对于每个名称,它返回有关符号名称、它所在的库的信息,以及它期望的参数数量(如果有)以及应该通过哪个接口调用它的信息(即 .Call.C.Fortran.External )。此外,它还返回符号的地址,并且可以将其传递给其他 C 例程。具体来说,这提供了一种在不同动态加载的包库之间显式共享符号的方法。此外,它还提供了一种查询符号解析位置的方法,并有助于诊断与动态解析相关的奇怪行为。

用法

getNativeSymbolInfo(name, PACKAGE, unlist = TRUE,
                    withRegistrationInfo = FALSE)

参数

name

本地符号的名称。

PACKAGE

一个可选参数,指定要限制对该符号的搜索的 DLL。如果这是"base",我们在R本身可执行。

unlist

一个逻辑值,控制使用单个符号名称调用函数时如何返回结果。如果unlistTRUE 并且name 中的符号名称数量为1,则返回NativeSymbolInfo 对象。如果是 FALSE ,则返回 NativeSymbolInfo 对象的列表。如果 name 中传递的符号数量超过 1,则忽略此设置。为了与此函数的早期版本兼容,默认为 TRUE

withRegistrationInfo

一个逻辑值,指示是否、ifTRUE,返回注册信息R关于符号及其参数类型(如果此类信息可用),或者如果FALSE仅返回符号的地址。

细节

这使用与所有本机接口( .Call 等)中使用的相同机制来解析符号。如果该符号已由包含该符号的 DLL 显式注册,则将返回有关参数数量和调用该符号的接口的信息。否则,返回通用的本机符号对象。

通常,NativeSymbolInfo 元素的列表,其元素可以通过调用中的name 的元素进行索引。每个 NativeSymbolInfo 对象都是一个包含以下元素的列表:

name

符号的名称,由 name 参数给出。

address

如果 withRegistrationInfoFALSE ,则这是符号的本机内存地址,可用于调用例程,并可与其他符号地址进行比较。这是一个外部指针对象,属于 NativeSymbol 类。如果withRegistrationInfoTRUE 并且注册信息可用于该符号,则这是类RegisteredNativeSymbol 的对象,并且是对可以访问例程指针和注册信息的内部数据类型的引用。这也可以用于调用 .Call.C.Fortran.External

dll

包含 3 个元素的列表:

名字

库名称的缩写形式,可用作不同本机接口函数中 PACKAGE 参数的值。

小路

DLL 的完全限定名称。

动态查找

一个逻辑值,指示在该库中查找符号时是否使用动态解析,或者只能找到已注册的例程。

如果例程是由动态加载库显式注册的,则列表包含第四个字段

numParameters

调用此例程时应传递的参数数量。

此外,该列表还将有一个附加类,即 CRoutineCallRoutineFortranRoutineExternalRoutine ,对应于应通过其调用的 R 接口。

如果未找到任何符号,则会引发错误。

如果 name 仅包含一个符号名称,并且 unlistTRUE ,则返回单个 NativeSymbolInfo 而不是包含该一个元素的列表。

注意

的第三个元素NativeSymbolInfo对象被重命名为packagedllR版本 3.6.0,为了与名称保持一致NativeSymbolInfo返回的对象getDLLRegisteredRoutines().

注意

访问此反射信息的一个动机是能够将本机例程作为 C 中的函数指针传递给 C 例程。这使我们能够处理本机例程并R以类似的方式起作用,例如当传递一个R函数到 C 代码,在计算的不同点对该函数进行回调(例如,nls)。此外,我们可以只解析一次符号,并避免重复解析或使用内部缓存。

作者

Duncan Temple Lang

参考

For information about registering native routines, see “In Search of C/C++ & FORTRAN Routines”, R-News, volume 1, number 3, 2001, p20-23 (https://www.r-project.org/doc/Rnews/Rnews_2001-3.pdf).

也可以看看

getDLLRegisteredRoutinesis.loaded.C.Fortran.External.Calldyn.load

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Obtain a Description of one or more Native (C/Fortran) Symbols。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。