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/ ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help