[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.

class X {
    X ();
    ~X ();
    void Give7(double*);

class Y {
public: Y (); ~Y ();

#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)   
---- 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

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] 3

For some reason, it is not altering x as it should.

What am I doing wrong?

Rob Hyndman
Rob J Hyndman
Associate Professor & Director of Consulting
Department of Econometrics & Business Statistics
Monash University, VIC 3800, Australia.

More information about the R-help mailing list