你能从C DLL调用C#DLL吗?

我用C#构建了一个DLL。 现在我想使用R Environment调用该DLL中的函数。 R环境支持调用非托管C / C ++ DLL,但不支持调用.NET DLL。 所以我的问题是,我可以从C / C ++ DLL中调用C#DLL中的函数吗? 如果是这样,您是否有关于如何执行此操作的信息的链接?

最直接的方法是将C#DLL中的一个C#类作为COM对象公开,然后从C / C ++ DLL创建它的一个实例。 如果这不是可接受的选项,则需要创建混合模式C ++ DLL(包含托管代码和非托管代码)。 您的C / C ++ DLL可以调用混合模式DLL中的导出函数,这可以将调用转发到您的C#类。

本文可能会帮助您:

CLR托管API(MSDN)

更新:有一个名为mergebin的工具,它随.NET SQLite包装器一起提供 ,可用于创建混合模式本机/托管DLL。 从以下位置获取源代码:

SQLite for ADO.NET 2.0(SourceForge)

你会在bin\tools文件夹中找到exe。

千电子伏

这实际上非常简单。 只需使用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。