「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>.NETのクロスプラットフォーム対応]] * 目次 [#b351b72c] #contents *概要 [#n3f0bbfd] -Windowsで使用できていたP/Invokeは、~ .NET Core、Linuxでも利用可能である模様。 -それでは、アンマネージドコードをP/Invokeして、~ どのように.NET Coreをクロスプラットフォーム対応させるのか? *詳細 [#w3761a31] **準備 [#a1145c67] -先ず、DLLやSOなどのアンマネージ・ライブラリを作成する。 -次いで、上記のアンマネージ・ライブラリ、若しくは、~ Win32 APIやsyscall, libc, etc.を呼出す、[[P/Invokeライブラリを作成する。>#f2e1dcb6]] -ヤルとすれば、こんな感じか。 --Win32~ https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Infrastructure/Public/Win32 --POSIX~ ...と言う名前空間に分割するのが良いかも。~ https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Infrastructure/Public/POSIX **実装 [#bead8559] -ラッパー・ライブラリから、P/Invokeライブラリを呼び出す。 -ラッパー・ライブラリはマネージドコード上でインターフェイスを定義。 ***分岐させる方法 [#z367aa31] Environment.OSVersionを使用して分岐させる。 ***分岐させる位置 [#w67a20d4] -ラッパー・ライブラリ内部で、~ Environment.OSVersionを使用して分岐させる。 -ラッパー・ライブラリをWindows、Linuxの2系統を作成して、~ 呼び出し元でEnvironment.OSVersionを使用して分岐させる。 ※ 暗号化ライブラリでは、内部で~ [[CAPI(CSP)、CNG、OpenSSLなどのプロバイダが切り替えられるので>OpenSSL]]、基本、~ 前者のように、ラッパー・ライブラリ内部で分岐させるのが良いと考える。 *参考 [#f2e1dcb6] -[[マネージドコードとアンマネージドコードのブリッジ]] -[[.NET Core on Linuxのポイント > P/Invoke>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?.NET%20Core%20on%20Linux%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88#l9d2ff1c]] **[[マネージドコードとアンマネージドコードのブリッジ]] [#tcf354c9] **[[.NET Core on Linuxのポイント > P/Invoke>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?.NET%20Core%20on%20Linux%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88#l9d2ff1c]] [#x0dbc58e] ---- Tags: [[:Windows]], [[:プログラミング]], [[:.NET開発]]