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


R CallExternal C/C++ 代码的现代接口


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

说明

要传递的函数R已编译的 C/C++ 代码的对象已加载到R.

用法

    .Call(.NAME, ..., PACKAGE)
.External(.NAME, ..., PACKAGE)

参数

.NAME

给出 C 函数名称的字符串,或引用此类名称的 "NativeSymbolInfo""RegisteredNativeSymbol""NativeSymbol" 类的对象。

...

要传递给编译代码的参数。 .Call 最多为 65。

PACKAGE

如果提供,则限制对字符串的搜索.NAME到此参数给出的 DLL(加上常规扩展,‘。所以', '.dll’,……)。

该参数遵循...,因此其名称不能缩写。

这是为了增加包的安全性,通过使用这个参数可以确保没有其他包可以覆盖它们的外部符号,并且还可以加快搜索速度(请参阅“注意”)。

细节

这些函数用于调用使用内部函数的编译代码R对象,将参数作为序列传递给代码R对象。它们采用 C 调用约定,因此通常也可用于 C++ 代码。

有关如何编写与这些函数一起使用的代码的详细信息,请参阅“编写 R 扩展”手册中的“系统和外语接口”一章。它们的不同之处在于参数传递给 C 代码的方式:.External 允许可变或无限数量的参数。

这些函数是 primitive ,并且 .NAME 始终与提供的第一个参数(不应命名)匹配。为了清楚起见,请避免在传递给 ... 的参数中使用与 .NAME 匹配或部分匹配的名称。

一个R在编译代码中构造的对象。

外部代码的头文件

编写与这些函数一起使用的代码将需要使用内部R‘中定义的结构Rinternals.h'和/或'中的宏Rdefines.h’。

注意

如果要频繁使用这些函数之一,请指定 PACKAGE(将搜索限制为单个 DLL)或将 .NAME 作为本机符号对象之一传递。搜索符号可能需要很长时间,尤其是在加载许多命名空间时。

你可能会看到PACKAGE = "base"对于链接到的符号R。不要在您自己的代码中使用此符号:此类符号不是 API 的一部分,可能会在没有警告的情况下进行更改。

PACKAGE = "" 曾经被接受(但未记录):现在它是一个错误。

参考

Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer. (.Call.)

也可以看看

dyn.load.C.Fortran

“编写 R 扩展”手册。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Modern Interfaces to C/C++ code。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。