メインメニューを開く

差分

P/Invoke

1,972 バイト追加, 2016年12月6日 (火) 07:10
ページの作成:「P/Invoke(語源:Platform Invoke)とは、.NET Frameworkにおける共通言語基盤 (CLI) の機能の一つで、マネージコードから動...」
P/Invoke(語源:Platform Invoke)とは、[[.NET Frameworkに]]おける[[共通言語基盤]] ([[CLI]]) の機能の一つで、[[マネージコード]]から[[動的ライブラリ]]内の[[ネイティブコード]]を呼び出すことを可能にするものである。受け渡しされるデータ型は、必要であればCLIによって適切に変換されるが、[[メタデータ]]によって[[プログラマー]]が明示的に変換方法を指定することもできる。こうした[[データ]]の変換を[[マーシャリング]]という。

== 概要 ==
大雑把にいえばC#からCで書かれたライブラリの関数を呼び出せる。
いってみればJavaのJNIとほとんど同じだな。
だがJavaより遥かに簡潔明瞭に書ける。
マネージコードからネイティブコードへは適切に切り替えられるためunsafeは不要である。

重い処理を部分的にネイティブコードで書いて加速を目論む用途などで使われるが、P/Invokeの呼び出し(マネージコードとネイティブコードの切り替え)が絶望的なほど遅いので頻繁に呼ぶと逆に遅くなるパターンも多い。これもJavaのJNIと同じだな。

[[Xamarin]]などでは標準対応されていない[[OS]]の標準ライブラリを叩くのにも活躍する。
* [[Xamarin.Mac/OSのバージョンを取得する]]
* [[Xamarin.Mac/ウインドウの一覧を取得する]]

== 関連項目 ==
* [[マネージドコード]]
* [[アンマネージドコード]]
* [[ネイティブコード]]
* [[CSharp-SQLite]]
* [[NeoLua]]

== 外部リンク ==
* [http://www.pinvoke.net/ PInvoke.net] - Win32APIをはじめとしたアンマネージAPIのP/Invoke宣言を集めたデータベースサイト。
* [http://msdn2.microsoft.com/ja-jp/library/sd10k43k(VS.80).aspx アンマネージ コードとの相互運用] - MSDN2

== 参考文献 ==
{{reflist}}

{{stub}}
匿名利用者