我已经在C#中构建了一个DLL。现在我想用R Environment来调用该DLL中的函数。 R环境支持调用非托管C/C++ DLL,但不支持调用.NET DLL。所以我的问题是,我可以从C/C++ DLL调用C#DLL中的函数吗?如果是这样,你有链接到如何做到这一点的信息?你可以从C DLL调用C#DLL吗?
8
A
回答
9
这样做最直接的方法是将C#DLL中的一个C#类作为COM对象公开,然后从C/C++ DLL中创建它的一个实例。如果这不是一个可接受的选项,则需要创建一个混合模式的C++ DLL(其中包含托管代码和非托管代码)。您的C/C++ DLL可以在您的混合模式DLL中调用导出的函数,这样可以将调用转发给您的C#类。
3
这篇文章可能会帮助你:
更新时间:有一个叫mergebin工具附带的.NET SQLite wrapper你可以用它来创建混合模式的本地/托管的DLL。从抓斗的源代码:
SQLite for ADO.NET 2.0 (SourceForge)
你会发现在bin\tools
文件夹中的exe文件。
Kev
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。
相关问题
- 1. 我可以从c#.net dll中调用vb.net dll吗?
- 2. 你可以在UWP中的C#代码中使用C++ DLL吗?
- 3. 从C++调用C#dll
- 4. 调用C++ DLL从C#
- 5. LSODA到DLL - Fortran(F77)从dll调用C#
- 6. C#DLL可以调用调用C++静态库的C++/CLI托管包装吗?
- 7. 从C++和C调用C++ DLL
- 8. 从Visual Basic调用C++ DLL
- 9. 从Python调用C++ DLL
- 10. 从Delphi调用C#dll
- 11. 从C#调用BCB dll#
- 12. 从java调用C++ dll
- 13. 我可以从程序(DLL)调用的C++或C编译器
- 14. 从C#应用程序调用C++ DLL
- 15. C#.NET调用C++ DLL
- 16. 在C中调用C++ DLL
- 17. 创建C++ Dll,并从C#调用它#
- 18. 从C调用dll与C++头#
- 19. 从C#调用C dll代码?
- 20. 从C#调用非托管C++类DLL#
- 21. AccessViolation,当从C++/CLI调用C++ - DLL
- 22. 从C#程序调用一个C DLL
- 23. 从C++/CLI调用C#dll函数
- 24. 我可以正确调用这个C++ DLL吗?
- 25. VB.NET窗体可以形成应用程序引用并在引用C++ DLL的C#DLL中调用函数吗?
- 26. 从C#调试CUDA Dll#
- 27. 调试从C#调用VC++ 6 DLL#
- 28. IronPython可以直接调用.net dll吗?
- 29. 在C#中创建一个可以从DLL中调用的API
- 30. 从c#dll中回调C++/cli方法
混合模式的C++ DLL听起来像它会做的伎俩 - 我刚刚看过可用的模板来创建使用VS2008混合模式DLL项目,但没有看到一个。你将如何开始混合模式DLL? – Guy 2009-04-08 04:12:02
如果您创建一个新的C++类库,它将创建一个C++ .NET DLL项目。只要“公共语言运行时支持”设置设置为“公共语言运行时支持(/ clr)”,就可以在项目中自由使用托管代码和非托管代码。 – Andy 2009-04-08 11:14:21