.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 独自のマネージドへの変換処理の実装が必要
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 独自のマネージドへの変換処理の実装が必要