2010-12-17 66 views
0

我將自己描述爲一箇中級R用戶,但總共爲C/C +/C#新手。我目前的任務是使用供應商提供的SDK將數據從商業系統中提取出來。這是作爲一個dll文件提供的,我也有一些C + +和C#代碼的文檔和示例。如何調用作爲C#.net COM DLL文件提供的SDK

從R調用這些C函數並獲取數據的最佳方式是什麼?任何人都可以推薦一些很好的(介紹性)閱讀材料或示例嗎?

回答

1

擁有供應商支持的SDK是良好的第一步。我從那時開始幾次。

一個問題可能是SDK可以很好地用Visual Studio構建。作爲一般規則,在不同的編譯器中混合使用C++代碼是非常困難的(因爲生成的代碼在不完整的函數簽名中會有所不同)。所以在這裏你可能沒有Rcpp,因爲你有兼容庫可以使用。

另一方面,C可以工作。仍然存在一些問題,因爲您可能需要創建一些額外的文件以使Visual Studio創建的庫與您必須使用的MinGW鏈接器兼容。詳細信息位於MinGW站點上。現在,C可以說是一個比C++更乏味的接口,但至少你有機會使它工作。我多年前使用這種方法將R連接到使用彭博C SDK的彭博終端後端(而當前的RBloomberg包使用Java)。

最後,C#和(四)COM路線可能會工作,但我沒有這方面的經驗。

0

根據dll文件(.NET或不),您可以從.NET中訪問它的功能。如果你不能使用.NET,你需要互操作從C#中調用函數:http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx

至於R和C#:這裏是從C#中調用R A指針:http://joachimvandenbogaert.wordpress.com/2009/03/26/r-and-c-on-windows/正如你可能會注意到,我很遺憾一直沒有保持這個話題,因爲我切換到Java。

對於完全自動化的解決方案,您可以在C#中調用SDK並將其傳遞給C#的R連接器。爲了使您的解決方案更具靈活性,我建議在C#中配置R代碼。

+0

我寧願在大多數R代碼中封裝一點C代碼,而不是相反......但乞丐無法選擇器! – PaulHurleyuk 2010-12-17 12:38:03

0

看一看的RCPP包 - 我還沒有機會嘗試它自己還,但它看起來像調用C++來自R

http://dirk.eddelbuettel.com/code/rcpp.html的一個很好的方式 - 或CRAN

+1

感謝您的插件,但在這裏不太可能有所幫助,因爲提供的SDK可能與MinGW工具鏈中的g ++不兼容,請參閱我的答案瞭解更多信息。 – 2010-12-17 15:50:24

1

您可以將其作爲一個兩階段過程來完成。首先,編寫一個C#程序,用於從DLL中檢索數據(請參閱,例如,http://www.adp-gmbh.ch/csharp/call_dll.html),並將其寫入文本文件。然後從文本文件中導入數據並在R中進行分析。