各種のマーシャリングのサンプル
ガベージ コレクションやスレッド処理などの要因が相互運用マーシャラーの動作に影響を与えることがあります。 さらに、プログラミング モデルおよび型モデルにおける微妙な違いのために、アンマネージ ライブラリへのデータの引き渡しで混乱が生じる場合があります。 このセクションでは、そのような違いに対処したサンプルをいくつか示します。
各種の項目の型に関するマーシャリング オプションを次の表に列挙して、その使用方法を説明し、対応するサンプルへのリンクを示します。
項目の型 |
説明 |
サンプル |
---|---|---|
関数ポインター |
関数ポインターを要求するアンマネージ関数にデリゲートを渡します。 |
|
HandleRef 構造体を使用して、ガベージ コレクションを防ぎます。 |
||
LPARAM |
GCHandle 構造体を使用して、LPARAM 型を要求するアンマネージ関数にマネージ オブジェクトを渡します。 |
|
シングルスレッド アパートメント (STA)/マルチスレッド アパートメント (MTA) |
アンマネージ関数が CoInitialize を呼び出すときに、既定のアパートメント設定を変更します。 |
|
void* |
パラメーターとして void* を持つ関数を呼び出します。 |