library.dynam.reg {mvbutils} | R Documentation |
Auto-registration and loading of dynamic library
Description
A bit like useDynLib
but for direct use in your own package's .onLoad
, this loads a DLL and creates objects that allow the DLL routines to be called directly. If your package "Splendid" calls library.dynam.reg
in its .onLoad()
to load a DLL "speedoo" which contains routines "whoosh" and "zoom", then an environment "C_speedoo" will be created in the asNamespace("Splendid")
, and the environment will contain objects whoosh
and zoom
. R-code routines in "Splendid" can then call e.g.
.C( C_speedo$whoosh, ....)
You can only call library.dynam.reg
inside .onLoad
, because after that the namespace will be sealed so you can't poke more objects into it.
Note
Currently, all routines go into C_speedoo
, regardless of how they are meant to be called (.C
, .Call
, .Fortran
, or .External
). It's up to you to call them the right way. I might change this to create separate Call_speedoo
etc.
Note2
As of R3.1.1 at least, it's possible that "recent" changes to the useDynLib
directive in a package namespace might obviate the need for this function. In particular, useDynLib
can now create an environment/list that refers directly to DLL, containing references to individual routines (which will be slightly slowed because they need to be looked up each time). Also, useDynLib
can automatically register its routines. What's not obvious is whether it can yet do both these things together— which is what library.dynam.reg
is aimed at.
Usage
# Only inside a '.onLoad', where you will already know "package" and "lib.loc"
library.dynam.reg(chname, package, lib.loc, ...)
Arguments
chname |
DLL name, a string— without any path |
package , lib.loc |
strings as for |
... |
other args to |