我用C#构建了一个动态链接库。现在,我想使用R Environment调用该动态链接库中的函数。R环境支持调用非托管C/C++动态链接库,但不支持调用.NET动态链接库,所以我的问题是,我能从C/C++动态链接库调用C#动态链接库中的函数吗?如果是这样的话,你有关于如何做的信息的链接吗?
发布于 2009-04-08 02:48:27
最直接的方法是将C#动态链接库中的一个C#类公开为COM对象,然后从C/C++动态链接库创建它的实例。如果这不是一个可接受的选项,则需要创建一个混合模式的C++ DLL (包含托管代码和非托管代码)。C/C++动态链接库可以调用混合模式动态链接库中的导出函数,而混合模式动态链接库又可以将调用转发到C#类。
发布于 2009-04-08 02:51:57
这篇文章可能会帮助你:
更新: .NET SQLite wrapper附带了一个名为mergebin的工具,可以用来创建混合模式的本机/托管动态链接库。从以下位置获取源代码:
SQLite for ADO.NET 2.0 (SourceForge)
您将在bin\tools文件夹中找到可执行文件。
Kev
发布于 2015-04-25 03:10:54
这其实很简单。只需使用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动态链接库一样加载TextExport。
https://stackoverflow.com/questions/728325
复制相似问题