我在C#中构建了一个DLL。现在我想使用R Environment来调用该DLL中的函数。 R环境支持调用非托管C / C ++ DLL,但不支持调用.NET DLL。所以我的问题是,我可以从C / C ++ DLL中调用C#DLL中的函数吗?如果是这样,您是否有关于如何执行此操作的信息的链接?
答案 0 :(得分:9)
最直接的方法是将C#DLL中的一个C#类作为COM对象公开,然后从C / C ++ DLL创建它的实例。如果这不是可接受的选项,则需要创建混合模式C ++ DLL(包含托管代码和非托管代码)。您的C / C ++ DLL可以调用混合模式DLL中的导出函数,这可以将调用转发到您的C#类。
答案 1 :(得分:3)
这篇文章可能会帮到你:
已更新:有一个名为mergebin的工具随.NET SQLite wrapper一起提供,可用于创建混合模式本机/托管DLL。从以下位置获取源代码:
SQLite for ADO.NET 2.0 (SourceForge)
你会在bin\tools
文件夹中找到exe。
千电子伏
答案 2 :(得分:0)
实际上很容易。只需使用NuGet将“UnmanagedExports”包添加到.Net项目中。有关详细信息,请参阅https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports。
然后您可以直接导出,而无需进行COM层。以下是C#代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using RGiesecke.DllExport;
class Test
{
[DllExport("add", CallingConvention = CallingConvention.Cdecl)]
public static int TestExport(int left, int right)
{
return left + right;
}
}
R应该能够像普通的C dll一样加载TextExport。