COM呼び出しを介してRから.NET関数を呼び出すことが可能かどうか疑問に思っています。
ライブラリrcom
ではCOMオブジェクトの呼び出しが許可されているため、理論的には、COMオブジェクトとして公開されているすべての.NETアセンブリでこれが可能です。
簡単にするために、で.Reverse()
関数を呼び出すことができるかどうかを確認します。この関数はSystem.Text
、デフォルトで.NETFrameworkからCOMオブジェクトとして公開されています。
これは私がこれまでに試したことです:
システム内のProgIDのリストを取得しました(C#コードへのリンクを参照)。これが私のシステムに関連するProgIDのリストです:
---start list of COM ProgID entries--- <snip> System.SystemException -> mscoree.dll System.Text.ASCIIEncoding -> mscoree.dll System.Text.StringBuilder -> mscoree.dll System.Text.UnicodeEncoding -> mscoree.dll System.Text.UTF7Encoding -> mscoree.dll System.Text.UTF8Encoding -> mscoree.dll <snip> ---end list---
このRコードは、COMオブジェクトとして公開されている.NET.dllをロードします。
library('rcom') x <- comCreateObject("System.Text.ASCIIEncoding")
それは間違いなくCOMオブジェクトを見つけます:
x attr(、 "class") 1 "COMObject"
.Reverse()
私の質問は、このCOMオブジェクト内で関数を呼び出すにはどうすればよいですか?
アップデート
.NETでは、呼び出しは次のようになります。
string x = "hello".Reverse();
それで、Rでは、呼び出しは?
アップデート
RがC#を呼び出す例については、スライド61の「Windows上のアプリケーションにRを埋め込む」の「 RがC#を呼び出す」を参照してください。
ProgId
これはProjectName.ClassName
.NETクラスからのものであることに注意してください。