web-dev-qa-db-ja.com

.Net CoreでのC ++ / CLIサポート

私たちのプロジェクト構造は

native.dll:-これには、c\c ++で記述された純粋なネイティブコードが含まれます。このnative.dllは、* defファイルを使用していくつかの関数を公開します。

Wrapper Library(wrapper.dll compiled with .Net framework v4.0):-native.dllの機能を使用するために、C++\CLIを使用してWrapper lib(wrapper.dll):clr\oldsyntaxに書き込まれます。このラッパーには、InteroperabilityおよびMarshallingのすべてのコードが含まれています。

Application(Console App v4.0)wrapper.dllによって直接提供される機能を使用するためにnative.dllを直接使用します。

次に、このプロジェクトを。Net Coreで実行する必要があります。これは、.Net Core applicationreference wrapper.dllを参照するnative.dllを持つことを意味します。

私はこれが直接機能しないことを知っています。しかし、問題は。Net Core(CoreCLR)がサポートしているかどうかC++\CLI(clr\oldsyntax)ランタイム環境

いいえの場合、このアプリケーションの動作の可能な解決策は何ですか?

24
User1234

.Net Core(CoreCLR)がC++\CLI(clr\oldsyntax)ランタイム環境をサポートするかどうか

私が知る限り、 。NET CoreでC++/CLIをサポートする予定はありません です。

いいえの場合、このアプリケーションの動作の可能な解決策は何ですか?

C APIを提供できます(すべきです)。 Mono eg P/Invokeをサポート および 。NET CoreはP/InvokeもサポートこのStack overflow question および this DllMapも参照)関連チケット )。

9
Sonic78

.net Coreチームは、WindowsのみのC++/CLIのサポートのみをコミットします(今?)。

その意図は、.net Core 3.0向けに提供することでした。リリースノートではまだ明示的に言及していませんが、C++/CLIのサポートはWPF(Windowsのみ)を提供するための前提条件でした。これは現在.net Core 3.0でサポートされています。

Windowsで混合モードアセンブリをサポート-#1801

この問題(#18013)は、CoreCLRでの混合モードアセンブリの読み込みと実行のサポートに向けた進捗状況を追跡します。主な目標は、.NET CoreでWPFおよびその他の既存のC++/CLIコードのサポートを提供することです。作業の一部は、MSVCコンパイラの更新に依存します。

上記の @ Tomas-KubesCoreCLRはC++/CLIcrossplatをサポートしますか?-#659)で言及したgithubの問題(#659 、クロスプラットフォームC++/CLIについてです。

ところで、VS2017/.net-4.7で "clr\oldsyntax"でコンパイラの警告が表示されます。したがって、このコンパイラフラグは既に廃止されています。

UPDATE:これは.Net Core 3.1まで来ません

4
Hezi

C++に固執したい(つまり、OOインターフェイスを.NETに公開する)場合、別の潜在的な解決策(明らかに非常に難しいタスクですが)は、 monoプロジェクトのCppSharp 。自動的に生成されたC#ラッパーを介してネイティブC++コードを公開できます。OSXと同様にWindows、Linuxをサポートします。生成されたコードが.NET標準ターゲットにコンパイルできる場合(しようとしませんでした)、生成されたコードが派手なAPIを使用していないためだと思います(基本的には相互運用とマーシャリングコードです)。方法としては、生成プロセスをカスタマイズすることも可能です(ただし、おそらく簡単な作業ではありません)。

2
odalet