Description Usage Arguments Details Value See Also Examples
Function to bind several foreign functions of a C library via installation of thin R call wrappers.
1 2 3 |
libnames |
vector of character strings giving short library names of the shared library to be loaded. See |
signature |
character string specifying the library signature that determines the set of foreign function names and types. See details. |
envir |
the environment to use for installation of call wrappers. |
callmode |
character string specifying the calling convention, see details. |
pat |
NULL or regular expression character string applied to symbolic names. |
replace |
NULL or replacement character string applied to |
funcptr |
logical, that indicates whether foreign objects refer to functions ( |
dynbind makes a set of C functions available to R through installation of thin call wrappers.
The set of functions, including the symbolic name and function type, is specified by signature ; a character string that encodes a
library signature:
The library signature is a compact plain-text format to specify a set of function bindings. It consists of function names and corresponding call signatures. Function bindings are separated by ‘;’ (semicolon) ; white spaces (including tab and new line) are allowed before and after semicolon.
function-name ( call-signature ; ... |
Here is an example that specifies three function bindings to the OpenGL library:
1 | "glAccum(If)v ; glClear(I)v ; glClearColor(ffff)v ;"
|
Symbolic names are resolved using the library specified by libnames using dynfind for loading.
For each function, a thin call wrapper function is created using the following template:
1 |
<MODE> is replaced by callmode argument, see .dyncall for details on calling conventions.
<TARGET> is replaced by the external pointer, resolved by the ‘function-name’.
<SIGNATURE> is replaced by the call signature string contained in signature.
The call wrapper is installed in the environment given by envir.
The assignment name is obtained from the function signature.
If pat and replace is given, a text replacement is applied to the name before assignment, useful for basic C name space mangling such as exchanging the prefix.
As a special case, dynbind supports binding of pointer-to-function variables, indicated by setting funcptr to TRUE, in which case <TARGET>
is replaced with the expression .unpack(<TARGET>,"p",0) in order to dereference <TARGET> as a pointer-to-function variable at call-time.
The function returns a list with two fields:
libhandle |
External pointer returned by |
unresolved.symbols |
vector of character strings, the names of unresolved symbols. |
As a side effect, for each wrapper, dynbind assigns the ‘function-name’ to the corresponding call wrapper function in the environment given by envir.
If no shared library is found, an error is reported.
.dyncall for details on call signatures and calling conventions,
dynfind for details on short library names,
.unpack for details on reading low-level memory (e.g. dereferencing of (function) pointer variables).
1 2 3 4 5 6 | # Install two wrappers to functions of the R shared C library.
info <- dynbind("R","
R_ShowMessage(Z)v;
R_rsort(pi)v;
")
R_ShowMessage("hello")
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.