[R] Problems with a dll under windows
Rob Hyndman
rob.hyndman at buseco.monash.edu.au
Mon Jul 7 05:49:01 CEST 2003
I am trying to get a dll compiled for use with dyn.load. I use R.1.7.1
under Windows.
I have tried the following trivial example based on the "Writing R
extensions" manual.
rtest.h
--------
class X {
public:
X ();
~X ();
void Give7(double*);
};
class Y {
public: Y (); ~Y ();
};
rtest.cpp
---------
#include <iostream.h>
#include "rtest.h"
static Y y;
extern "C" {
void X_main () {
X x;
}
}
X::X() { std::cout << "construct X" << std::endl; }
X::~X() { std::cout << "destruct X" << std::endl; }
Y::Y() { std::cout << "construct Y" << std::endl; }
Y::~Y() { std::cout << "destruct Y" << std::endl; }
//silly function to test returning a constant double
void X::Give7(double * a)
{
*a=7;
}
---- end rtest.cpp
Then I create the dll using the following DOS command
Rcmd SHLIB rtest.cpp
(I have all the perl, MINGW and related stuff set up as
per the instructions at http://www.stats.ox.ac.uk/pub/Rtools/)
Then in R, I type the following.
> x <- 3
> dyn.load("rtest.dll")
So far, so good.
Then...PROBLEM 1
> .C("Give7",x)
Error in .C("Give7", x) : C/Fortran function name not in load table
How do you convince the compiler to use the name "Give7" as an entry
point?
And PROBLEM 2...
I checked the DLL and the names have been decorated.
If I use the decorated name I get the following:
> .C("_ZN1X5Give7EPd",x)
[[1]]
[1] 3
For some reason, it is not altering x as it should.
What am I doing wrong?
Thanks.
Rob Hyndman
___________________________________________________
Rob J Hyndman
Associate Professor & Director of Consulting
Department of Econometrics & Business Statistics
Monash University, VIC 3800, Australia.
http://www-personal.buseco.monash.edu.au/~hyndman/
More information about the R-help
mailing list