Как вызвать SDK, предоставляемый как C # .net COM файл DLL в R - PullRequest
0 голосов
/ 17 декабря 2010

Я бы описал себя как промежуточный пользователь R, но в целом начинающий C / C + / C #. Моя текущая задача заключается в извлечении данных из коммерческой системы с использованием SDK, предоставленного поставщиками. Это предоставляется в виде файла DLL, и у меня также есть некоторая документация и примеры кода на C + и C #.

Каков наилучший способ вызвать эти функции C из R и получить данные. Кто-нибудь может порекомендовать хороший (вводный) материал для чтения или примеры?

Ответы [ 4 ]

1 голос
/ 17 декабря 2010

Вы можете сделать это как двухэтапный процесс. Сначала напишите небольшую программу на C #, которая извлекает данные из dll (см., Например, http://www.adp -gmbh.ch / csharp / call_dll.html ) и записывает их в текстовый файл. Затем импортируйте данные из текстового файла и проанализируйте их в R.

1 голос
/ 17 декабря 2010

Хороший первый шаг - наличие SDK, поддерживаемого поставщиком.Я начал с этого несколько раз.

Одна из проблем может заключаться в том, что SDK вполне может быть построен с помощью Visual Studio.Как правило, очень трудно или невозможно смешивать код C ++ в разных компиляторах (поскольку сгенерированный код будет отличаться сигнатурами искаженных функций).Так что, вероятно, вам не нужно Rcpp , поскольку у вас есть совместимая библиотека для работы.

С другой стороны, C может работать.По-прежнему существуют некоторые проблемы, связанные с тем, что вам может потребоваться создать некоторые дополнительные файлы, чтобы сделать созданную Visual Studio библиотеку совместимой с компоновщиком MinGW, который вы должны использовать с R. Подробная информация находится на сайте MinGW.Теперь C, возможно, более утомительный интерфейс, чем C ++, но, по крайней мере, у вас есть шанс заставить его работать.Я использовал этот подход много лет назад, чтобы подключить R к серверным терминалам Bloomberg с помощью Bloomberg C SDK (тогда как текущий пакет RBloomberg использует Java).

Наконец, C # и (D) COMмаршрут может работать, но у меня нет опыта в этом вопросе.

0 голосов
/ 17 декабря 2010

Посмотрите на пакет Rcpp - у меня еще не было возможности попробовать его самому, но это похоже на хороший способ вызова C ++ из R

http://dirk.eddelbuettel.com/code/rcpp.html - или на кране

0 голосов
/ 17 декабря 2010

В зависимости от файла DLL (.NET или нет), вы можете получить доступ к его функциям из .NET. Если вы не можете использовать .NET, вам потребуется взаимодействие для вызова функций из C #: http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx

Что касается R и C #: вот указатель для вызова R из C #: http://joachimvandenbogaert.wordpress.com/2009/03/26/r-and-c-on-windows/ Как вы можете заметить, я, к сожалению, не поддерживал эту тему, поскольку перешел на Java.

Для полностью автоматизированного решения вы можете вызвать SDK из C # и передать его в разъем R для C #. Для гибкости вашего решения я рекомендую сделать код R в C # настраиваемым.

...