Hi, I am trying to set up a C++ library for my R code. I followed the 
R-extension manual but found out that the example of "X.cpp, X_main.cpp" 
is somewhat too simple. Here is my code:

 //lib4R.h testing for interfacing C++ with R -- using C++ library in R
#include <iostream>
using namespace std;

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

        int testIntDivision(int, int);
        double testDoubleMultiplication(double, double);

        int getID();
        void setID(int);
private:
        int ID;
};

// lib4R.cpp : Defines the entry points for the library.
#include "lib4R.h"

lib4R::lib4R() {
        cout << "Constructor lib4R()" << endl;
}

lib4R::~lib4R() {
        cout << "Destructor ~lib4R()" << endl;
}

extern "C" {

int lib4R::testIntDivision(int a, int b) {
      return a/b;
}

double lib4R::testDoubleMultiplication(double a, double b) {
        return a*b;
}

int lib4R::getID() {
        return this->ID;
}

void lib4R::setID(int ID) {
        this->ID = ID;
}

int main(int argc, char* argv[])
{
        cout << "Entering main()" << endl;
        lib4R lib1;

        cout << "testIntDivision(4,2) = " << lib1.testIntDivision(4,2) << 
endl;

        return 0;
}

} // extern C

I am working on Windows. I use these to compile the dll with Visual C++:

cl /MT /c lib4R.cpp
link /dll /out:lib4R.dll /export:testIntDivision /export:main lib4R.obj

So when I start rterm.exe:

>dyn.load("../lib4R.dll");
>.C("main");
Entering main()
Constructor lib4R()
testIntDivision(4,2) = 2
Destructor ~lib4$()
list()

The output is correct, but if I
>.C("testIntDivision", 4, 2);

it generated the dialog box claiming "R has encountered a problem and 
needs to be closed.......Please tell Microsoft about this problem....", 
sigh.

So what's wrong with my code, how do I use individual methods/functions of 
C++ in R?

Thanks in advance for any help you can offer!

Bing

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to