私たちのプロジェクト構造は
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 application
がreference wrapper.dll
を参照するnative.dll
を持つことを意味します。
私はこれが直接機能しないことを知っています。しかし、問題は。Net Core(CoreCLR)がサポートしているかどうかC++\CLI(clr\oldsyntax)ランタイム環境?
いいえの場合、このアプリケーションの動作の可能な解決策は何ですか?
.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も参照)関連チケット )。
.net Coreチームは、WindowsのみのC++/CLIのサポートのみをコミットします(今?)。
その意図は、.net Core 3.0向けに提供することでした。リリースノートではまだ明示的に言及していませんが、C++/CLIのサポートはWPF(Windowsのみ)を提供するための前提条件でした。これは現在.net Core 3.0でサポートされています。
この問題(#18013)は、CoreCLRでの混合モードアセンブリの読み込みと実行のサポートに向けた進捗状況を追跡します。主な目標は、.NET CoreでWPFおよびその他の既存のC++/CLIコードのサポートを提供することです。作業の一部は、MSVCコンパイラの更新に依存します。
上記の @ Tomas-Kubes 、 CoreCLRはC++/CLIcrossplatをサポートしますか?-#659)で言及したgithubの問題(#659 、クロスプラットフォームC++/CLIについてです。
ところで、VS2017/.net-4.7で "clr\oldsyntax"でコンパイラの警告が表示されます。したがって、このコンパイラフラグは既に廃止されています。
UPDATE:これは.Net Core 3.1まで来ません
C++に固執したい(つまり、OOインターフェイスを.NETに公開する)場合、別の潜在的な解決策(明らかに非常に難しいタスクですが)は、 monoプロジェクトのCppSharp 。自動的に生成されたC#ラッパーを介してネイティブC++コードを公開できます。OSXと同様にWindows、Linuxをサポートします。生成されたコードが.NET標準ターゲットにコンパイルできる場合(しようとしませんでした)、生成されたコードが派手なAPIを使用していないためだと思います(基本的には相互運用とマーシャリングコードです)。方法としては、生成プロセスをカスタマイズすることも可能です(ただし、おそらく簡単な作業ではありません)。