Mercurial > pub > dyncall > bindings
comparison R/rdc/man/rdc.Rd @ 0:0cfcc391201f
initial from svn dyncall-1745
| author | Daniel Adler |
|---|---|
| date | Thu, 19 Mar 2015 22:26:28 +0100 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:0cfcc391201f |
|---|---|
| 1 \name{rdc} | |
| 2 \alias{rdcLoad} | |
| 3 \alias{rdcFree} | |
| 4 \alias{rdcFind} | |
| 5 \alias{rdcCall} | |
| 6 \alias{rdcPath} | |
| 7 \alias{rdcUnpath} | |
| 8 \alias{rdcShowPath} | |
| 9 \alias{rdcUnpack1} | |
| 10 \alias{rdcDataPtr} | |
| 11 \title{invoke dynamic calls to foreign code} | |
| 12 \description{ | |
| 13 Invoke foreign function calls with support for loading modules and resolving symbols. | |
| 14 } | |
| 15 \usage{ | |
| 16 libhandle <- rdcLoad(libpath) | |
| 17 rdcFree(libhandle) | |
| 18 funcptr <- rdcFind(libhandle, symbol) | |
| 19 result <- rdcCall(funcptr, signature, ...) | |
| 20 rdcPath(addpath) | |
| 21 rdcUnpath(delpath) | |
| 22 rdcShowPath() | |
| 23 rdcUnpack1(object, offset, sigchar) | |
| 24 rdcDataPtr(object, offset = 0) | |
| 25 } | |
| 26 | |
| 27 \arguments{ | |
| 28 \item{libpath}{a file path to dynamic linked library(DLL).} | |
| 29 \item{libhandle}{an external pointer representing an operating-system specific handle to an opened DLL.} | |
| 30 \item{symbol}{a character string, specifying a function name symbol in a DLL.} | |
| 31 \item{funcptr}{an external pointer representing a pointer to function resolved by a symbol} | |
| 32 \item{signature}{a character string specifying the argument and return type of a function call, see Details below for more information.} | |
| 33 \item{addpath,delpath}{a directory path from where dynamic linked libraries should be loaded.} | |
| 34 \item{object}{An atomic object (scalar, vector, matrix or array).} | |
| 35 \item{offset}{An integer specifying an offset from the start of the linear data memory in bytes.} | |
| 36 } | |
| 37 | |
| 38 \details{ | |
| 39 The rdc package provides tools to establish flexible function calls to low-level precompiled code. | |
| 40 It is more flexible than \code{\link{.C}} and has the same type-unsafety dangers. | |
| 41 One can make arbitrary C (and C++ member-) function calls. | |
| 42 The language binding was designed to help write glue code to low-level C libraries in R (if the target library function is compatible with | |
| 43 the supported typeset and calling convention). | |
| 44 It makes use of signature strings to specify | |
| 45 the function prototyp to call. | |
| 46 to providing a thin binding layer between the core | |
| 47 dyncall library and the R programming language. | |
| 48 | |
| 49 The loading and unloading of code modules (*.DLL files on windows, *.dylib files on darwin and *.so files on other *nix flavour OSs) | |
| 50 is done using rdcLoad, similar to \code{\link{dyn.load}}. While \code{\link{dyn.load}} loads a DLL to the R run-time process, | |
| 51 rdcLoad returns the module handle as an external pointer. | |
| 52 | |
| 53 Symbol lookup is done using \code{rdcFind} and returns an external pointer pointing to the foreign function. | |
| 54 | |
| 55 The \code{rdcCall} function does invoke the function call. | |
| 56 It requires the \code{signature} character string argument, which consists of a series of type codes (given as ordinary characters) to | |
| 57 specify the argument types and the expected return type of the foreign function call which are separated by an ')' character. | |
| 58 | |
| 59 \deqn{sigchar_{arg_0} sigchar_{arg_1} \ldots ')' sigchar_{return}}{<sigchar-arg0> <sigchar-arg1> \ldots ')' <sigchar-return>} | |
| 60 | |
| 61 A signature character encodes the C type at the given argument position or return-type. | |
| 62 | |
| 63 \tabular{cll}{ | |
| 64 Signature char \tab C type \tab accepted R data types\cr | |
| 65 \sQuote{B} \tab \code{bool} \tab coerced to logical vector, first item\cr | |
| 66 \sQuote{c} \tab \code{char} \tab not yet implemented\cr | |
| 67 \sQuote{s} \tab \code{short} \tab not yet implemented\cr | |
| 68 \sQuote{i} \tab \code{int} \tab coerced to integer vector, first item\cr | |
| 69 \sQuote{l} \tab \code{long} \tab not yet implemented\cr | |
| 70 \sQuote{f} \tab \code{float} \tab coerced to numeric, first item casted to float\cr | |
| 71 \sQuote{d} \tab \code{double} \tab coerced to numeric, first item\cr | |
| 72 \sQuote{L} \tab \code{long long} \tab coerced to numeric, first item casted to long long\cr | |
| 73 \sQuote{p} \tab \code{void*} \tab external pointer or coerced to string vector, first item\cr | |
| 74 \sQuote{S} \tab \code{char*} \tab coerced to string vector, first item\cr | |
| 75 \sQuote{v} \tab \code{void} \tab no return type\cr | |
| 76 } | |
| 77 | |
| 78 The order of the arguments is left-to-right according to the C prototyp function declaration. E.g. | |
| 79 | |
| 80 e.g. the signature string of the function \samp{double foobar(int a, long long b, float c);} is \code{"iLf)d"}. | |
| 81 | |
| 82 } | |
| 83 \examples{ | |
| 84 | |
| 85 # load platform-specific standard C DLL | |
| 86 | |
| 87 clibname <- "libc" | |
| 88 if (.Platform$OS.type == "windows") clibname <- "msvcrt" | |
| 89 if (.Platform$OS.type == "darwin") clibname <- "libc.dylib" | |
| 90 | |
| 91 clib <- rdcLoad(clibname) | |
| 92 | |
| 93 # call sqrt function | |
| 94 | |
| 95 sqrt.fp <- rdcFind(clib,"sqrt") | |
| 96 print( rdcCall(sqrt.fp, "d)d", 144) ) | |
| 97 | |
| 98 } | |
| 99 \references{ | |
| 100 Adler, D., Philipp, T. (2008) \emph{Dyncall Library}. | |
| 101 \url{http://dyncall.org} | |
| 102 } | |
| 103 \author { | |
| 104 Daniel Adler \email{dadler@uni-goettingen} | |
| 105 } | |
| 106 \examples { | |
| 107 # bla | |
| 108 | |
| 109 } | |
| 110 \keyword{programming::interface} | |
| 111 |
