首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能从C动态链接库调用C#动态链接库吗?

你能从C动态链接库调用C#动态链接库吗?
EN

Stack Overflow用户
提问于 2009-04-08 02:45:55
回答 3查看 8.7K关注 0票数 8

我用C#构建了一个动态链接库。现在,我想使用R Environment调用该动态链接库中的函数。R环境支持调用非托管C/C++动态链接库,但不支持调用.NET动态链接库,所以我的问题是,我能从C/C++动态链接库调用C#动态链接库中的函数吗?如果是这样的话,你有关于如何做的信息的链接吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-08 02:48:27

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

票数 9
EN

Stack Overflow用户

发布于 2009-04-08 02:51:57

这篇文章可能会帮助你:

CLR Hosting APIs (MSDN)

更新: .NET SQLite wrapper附带了一个名为mergebin的工具,可以用来创建混合模式的本机/托管动态链接库。从以下位置获取源代码:

SQLite for ADO.NET 2.0 (SourceForge)

您将在bin\tools文件夹中找到可执行文件。

Kev

票数 3
EN

Stack Overflow用户

发布于 2015-04-25 03:10:54

这其实很简单。只需使用NuGet将"UnmanagedExports“包添加到您的.Net项目中。详情请参见https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

然后,您可以直接导出,而不必执行COM层。以下是示例C#代码:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/728325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档