13,002
回編集
(→概要) |
(→概要) |
||
1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
C++ | C++からC#ライブラリの関数を呼び出す方法は、複数の方法が存在しており、各々にメリットおよびデメリットがある。<br> | ||
下表に代表的な5種類の方法を示す。<br><br> | |||
<center> | <center> | ||
{| class="wikitable" | style="background-color:#fefefe;" | {| class="wikitable" | style="background-color:#fefefe;" | ||
|+ C++からC#ライブラリのメソッドを呼ぶ方法 | |||
|- | |- | ||
! style="background-color:#66CCFF;" | 方法 | ! style="background-color:#66CCFF;" | 方法 | ||
10行目: | 10行目: | ||
! style="background-color:#66CCFF;" | デメリット | ! style="background-color:#66CCFF;" | デメリット | ||
|- | |- | ||
| C++ | | C++のプロジェクトをC++/CLIに設定する || C++のプロジェクトの設定において、[CLIを使う]に変更する。<br>VisualStudioのIntelliSenseも使用可能。 || C++/CLIに関するドキュメントが少ない。<br><br><u>Windowsのみ使用可能。</u> | ||
|- | |- | ||
| .NET | | [https://github.com/3F/DllExport .NET DLLExport]を使用して、<br>C#ライブラリのメソッドをエクスポートする || C++/CLIを使用する必要がない。<br><br><code>GetProcAddress</code>関数が使用できるため、<br>よく知られた方法で関数を呼び出す事が出来る || C#ライブラリのソースコードが無い場合は利用できない。<br><br><u>Windowsのみ使用可能。</u> | ||
|- | |- | ||
| C# | | C++からC#ライブラリを呼ぶためのC++/CLIのラッパーライブラリを開発する || COMを使用しなくてよい。<br>C++およびC#のプロジェクトの設定を変更しなくてよい。 || C#ライブラリ、および、C++/CLIライブラリの2つのライブラリを作成する必要がある。<br>C++/CLIに関するドキュメントが少ない。<br><br><u>Windowsのみ使用可能。</u> | ||
|- | |- | ||
| | | Embedded Monoを使用する || C++およびC#ライブラリの2つのプロジェクトを作成するだけでよい。<br><u>Linux、MacOSでも使用可能である。ただし、デメリットも多い。</u><br><br>C++のプロジェクトにおいて、<br>Monoに関連するヘッダファイルをインクルードして、C#ライブラリを呼ぶ。<br> || Linuxの場合は、.NET Standard (.NET Core / .NET 5以降ではない) またはMonoを使用して、C#ライブラリを作成する必要がある。<br>Windowsの場合は、.NET FrameworkまたはMonoを使用して、C#ライブラリを作成する必要がある。<br>したがって、.NET Core / .NET 5以降は使用することができない。<br><br>また、実行環境にもMonoをインストールする必要がある。 | ||
|- | |- | ||
| C# | | C#ライブラリをCOM参照可能にする || C++/CLIライブラリは不要である。 || C++のソースコード量が増えて設計が煩雑となる。<br><br>COM (Component Object Model) は、Windows独自の技術であり、<br><u>Linuxでは直接サポートされていないため、Windowsのみ使用可能である。</u><br>COMはWindowsのオブジェクト指向プログラミングモデルであり、Microsoftの開発環境やWindows APIと密接に関連している。 | ||
|} | |} | ||
</center> | </center> | ||
<br> | <br> | ||
上表1において、以下の手順を記載する。<br> | 上表1において、以下の手順を記載する。<br> | ||
* C++/ | * C++のプロジェクトをC++/CLIに設定する | ||
* | * [https://github.com/3F/DllExport .NET DLLExport]を使用して、C#ライブラリのメソッドをエクスポートする | ||
* C++/ | * C++/CLIのラッパーライブラリを開発する | ||
* C# | * Embedded Monoを使用する | ||
* C#ライブラリをCOM参照可能にする | |||
<br><br> | <br><br> | ||