DLLして使えるようにする

  • R-extentionマニュアルの5.6(こちら)(こちらなら4.3)をそのままなぞれば、ヘッダーファイルとそれに対応するcppファイルとを使った実行cppファイルを、DLLにした上で、R内から呼び出して使うことはできる
  • はて。
  • あまりに自分の使い方と遠いので、何をしているのかわからない…
  • また、実行すると、Rの終了時に何か関係したことをするのだが、それによってフリーズしたりするので、ちょっと書き換えたいところだが…
  • でも、簡単ながらC++ライブラリを取り込むことを自分でできたことはよかった
// X.h

class X {
	public: X (); ~X ();
};

class Y {
	public: Y (); ~Y ();
};
// X.cpp

#include <R.h>
#include "X.h"

static Y y;

X::X() { REprintf("constructor X\n"); }
X::~X() { REprintf("destructor X\n"); }
Y::Y() { REprintf("constructor Y\n"); }
Y::~Y() { REprintf("destructor Y\n"); }
// X_main.cpp:

#include "X.h"

extern "C" {
	
	void X_main() {
		X x;
	}
	
} // extern "C"
# R CMD SHLIB X.cpp X_main.cpp
> dyn.load(paste("X",.Platform$dynlib.ext,sep=""))
constructor Y
> .C("X_main")
constructor X
destructor X
list()