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 |