.NET Framework : マネージドコードからアンマネージドコードを呼ぶ | 愚痴はなかなか人に言えない

.NET Framework : マネージドコードからアンマネージドコードを呼ぶ

メモメモ

C++/CLIからのアンマネージドコードの扱い

・P/Invoke (プラットフォーム呼び出し)
・処理時間遅いらしい
・DLL関数に使われている変数がblittableな場合は有効。
構造体であっても、そのメンバがblittableなもので構成されている場合は比較的簡単
しかし、深くネストしている場合は、それなりの実装時間を要する。
・純粋なマネージドアプリケーションが実装できる。
・インスタンスベース+関数ベースでのやり取りしかできない。
(C#,VBはこれとCOM経由でしかアンマネージドコードを呼べない)

・Interop(暗黙のP/Invoke)
・C++ Interop
・混合アセンブリと呼ばれる、マネージドとアンマネージドが混ざったアセンブリ
・マーシャリングの処理速度はP/Invokeに比べ早い
・混合なので、アンマネージドのソースコードが利用できる。


・C++ COM Interop
・Tlbimp.exeで変換すると普通のClassLibのように扱えるらしい(相互運用アセンブリ)
・Tlbimp.exeで(プライマリ相互運用アセンブリ)※まだここら辺よくわかってない。
・C++に限らずC#でもCOMIFは扱えるが、C++のほうがやれることが多い例えば、次の項目
・アンマネージドコードから直接COMを使う(CoCreateInterface等)(CRCW)

キーワード:マーシャリング
blittable byte, int16, int32等、マネージ/アンマネージでも表現が同じもの
上記の1時次元配列もblittableに含まれる。
blittableだけで、表現されるクラスや構造体

非blittable 独自のマネージドへの変換処理の実装が必要