GNU RのFFI
GNU RはFFI: Foreign Function Interfaceの仕組みを持っているが,例えば統合アーカイバプロジェクトで提供されてるような任意のDLL(ほとんどの場合C/C++で実装されたもの)を呼べる訳ではない.GNU Rが指定する特定のシグネチャの関数しか呼べないので,そのような適切なシグネチャを持ち,内部で所望のDLLを呼ぶような,いわゆる「グルー」のDLLを作る必要がある.まぁデータ表現の都合上しょうがないのかもしれないが... 面倒だよなぁ.よくある場合についてはFFIの方で適当に生のC表現に直してくれる方法も用意されていればいいのに.
具体的にはUnlha32.dll
内の
int WINAPI Unlha( HWND _hwnd, LPCTSTR _szCmdLine, LPTSTR _szOutput, const DWORD _dwSize )
というシグネチャのUnlha
が呼びたいんだが,_hwnd
にNULL
を渡すにも_svCmdLine
に"e foo.lzh"
を渡すにも,R言語だけでは書きようがない.Rの基礎データ構造であるSEXP
か,FFIを利用してもint *
とか
double *
がせいぜい.