當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。