「[[マイクロソフト系技術情報 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開発]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS