我已經在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