私はC#でDLLを構築しました。今、そのDLLの関数を呼び出すためにR Environmentを使いたいと思います。 R環境では、アンマネージC/C++ DLLを呼び出すことができますが、.NET DLLには呼び出せません。だから私の質問は、C/C++ DLLからC#DLLの関数を呼び出すことができますか?もしそうなら、これを行う方法に関する情報へのリンクがありますか?C DLLからC#DLLを呼び出すことはできますか?
答えて
これを行う最も単純な方法は、C#DLLのCOMクラスの1つをCOMオブジェクトとして公開し、C/C++ DLLからそのインスタンスを作成することです。それが受け入れ可能なオプションでない場合は、混在モードのC++ DLL(管理コードと非管理コードの両方を含む)を作成する必要があります。 C/C++ DLLは、混在モードのDLLでエクスポートされた関数を呼び出すことができます。この関数は、呼び出しをC#クラスに転送します。
この記事はあなたを助けるかもしれない:
更新:はmergebinと呼ばれるツールがあることに付属.NET SQLite wrapperあなたが混在モードネイティブ/マネージDLLを作成するために使用することができます。ソースコードをグラブ:
SQLite for ADO.NET 2.0 (SourceForge)
あなたがbin\tools
フォルダ内のexeファイルを見つけることができます。
kev
リンクKevのおかげでおもしろい読書。 – Guy
実際はかなり簡単です。 NuGetを使って.Netプロジェクトに "UnmanagedExports"パッケージを追加するだけです。詳細は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. プログラム(DLL)から呼び出すことができるC++コンパイラ
- 2. PowershellからC#dllを呼び出す
- 3. このDLL関数をC++/Cから呼び出す方法
- 4. C++でC#dllを呼び出す
- 5. C#コードでC++ dllを呼び出す
- 6. 私のC++ DLLでC#DLLを呼び出す方法は何ですか?
- 7. C++/CLIアプリケーションからC#.dllを呼び出す方法は?
- 8. C++ DLLからC#関数を呼び出す
- 9. C#プログラムからC DLLを呼び出す
- 10. COMなしのアンマネージC++アプリからC#dllを呼び出す
- 11. SQL Server 2008からアンマネージC/C++ DLL関数を呼び出す
- 12. ネイティブWin32 C++コードからUWP C++/CX dllを呼び出す
- 13. C#クライアントアプリケーションからC#COMサーバーDLLを呼び出す
- 14. DLLが.NET DLLを呼び出すことはできますか?
- 15. vbscriptでC#dllを呼び出す
- 16. JavaのC#DLLから関数を呼び出す方法は?
- 17. VBからC++ DLL関数を呼び出す方法は?
- 18. C#アプリケーションで.dllからグローバルにメソッドを呼び出す
- 19. VB6で作成されたDLLをCから呼び出す
- 20. Visual Studio 6でVBからVS2010 C++ dllを呼び出す
- 21. Assembly :: LoadFromはManaged C++ DLLから呼び出されました
- 22. linuxクライアントからwindows DLLを呼び出すことはできますか?
- 23. FireFoxでJavaScriptからC#dllを呼び出す方法はありますか?
- 24. Cからdll関数の呼び出しでクラッシュする#
- 25. C#からx64 C++ DLLを呼び出すと、プロセスがハングする(更新)
- 26. カーネルモードのC++ウィンドウからdllを呼び出す
- 27. C#コードからdelphi DLL関数を呼び出す
- 28. Delphi XE6からC#dll関数を呼び出すアクセス違反
- 29. FortranのDLLからC#コードを呼び出す方法
- 30. C++のDLLから関数を呼び出す#
この混在モードのC++ DLLは、トリックを行うように聞こえます。VS2008を使用した混在モードのDLLプロジェクトを作成するのに利用できるテンプレートを見てきましたが、表示されません。どのように混在モードのDLLを開始するつもりですか? – Guy
新しいC++クラスライブラリを作成すると、C++ .NET DLLプロジェクトが作成されます。 "共通言語ランタイムサポート"設定が "共通言語ランタイムサポート(/ clr)"に設定されている限り、プロジェクトで管理コードと非管理コードの両方を自由に使用できます。 – Andy