Share via


マーシャリングの概要

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

.NET Compact Framework Version 2.0 は拡張マーシャリングのサポート IDispatch を通じておよびプラットフォーム呼び出しおよび vtable 呼び出しを示します。 このサポートは次のとおりです。

  • MarshalAsAttribute 属性を使用します。

  • Windows Embedded CE でサポートされているバリアントの型をマーシャリングします。

  • COM インターフェイスを通じて、vtable が呼び出される型のマーシャリングします。

  • 埋め込まれた配列と文字列の構造体をマーシャリングします。

  • 構造体のレイアウトを指定します。

値か参照して、次の種類をマーシャリングすることができます。

  • BStr

  • IUnknown

  • IDispatch

  • SafeArray

  • DateTime (、OLE DATE としてマーシャリング)

  • Variant

.NET Compact Framework 2.0 AllocHGlobalFreeHGlobal メソッドをサポートすることに注意ください。

相互運用ログ

関数署名して、相互運用機能呼び出しのマーシャリングする方法、しても、マーシャリング プロセス中に発生がしたエラーを特定のログ ファイルを作成できます。 ファイルを作成する方法について、方法 : ログ ファイルを作成します。 を参照してください。 解釈する方法については、ログ ファイルを ログ ファイルの情報 参照してください。

相違点の完全な .NET Framework のマーシャリング

.NET Compact Framework が、完全な .NET Framework で提供されている次マーシャリングとの相互運用性機能をサポートしません。

  • カスタム マーシャリングします。

  • GetDelegateForFunctionPointer メソッドを使用してネイティブ関数ポインターからマネージ デリゲートを取得します。 ただし、マネージ デリゲートからネイティブ関数のポインターを作成することができます。

  • ネイティブ コンポーネントから .NET Compact Framework クラスへのアクセス。

  • IDispatch を介して構造 (VT_RECORD) を渡します。

  • IDispatch を介して Int64 型および UInt64 型の型を渡します。

.NET Compact Framework は、次のマーシャリングの動作中には、完全な .NET Framework によって異なります。

  • .NET Compact Framework 限定サポートします構造体のマーシャリングのフィールド、配列、および .NET Framework と比較した戻り値の型の要素。 既定のマーシャリングの動作をオーバーライドについては、マーシャリングの概要 を参照してください。

  • .NET Compact Framework 配列のマーシャリングされる、SCODE 値を許可します。完全な .NET Framework しません。

  • .NET Compact Framework IUnknown と IDispatch ポインターの配列を完全な .NET Framework とは異なるマーシャリングします。

  • .NET Compact Framework マルチスレッド アパートメントとしてすべてのスレッドの初期化になり他モデルのスレッドや、アパートメント モデルの設定をサポートしません。 したがって、.NET Compact Framework は、 ApartmentState プロパティまたは、次の方法をサポートしません。

ステートメントを宣言、Visual Basic でのマーシャリング

Visual Basic Declare ステートメントが代わりに、DLL 内の外部プロシージャへの declare 参照します。 メモその Ansi キーワード、Declare ステートメントはサポートされていません。

Declare ステートメントでのマーシャリングは DllImportAttribute オブジェクト以外の ByVal String クラスのマーシャリングと同じです。 In a Declare statement, a ByVal String parameter will be marshaled as an output parameter. 文字列は不変であるため、これにより共通言語ランタイムの文字列をコピーして新しい参照を取得します。

呼び出しマーシャラーの IDispatch とプラットフォームの違い

次の表は、2 つのマーシャラーで異なるマーシャリングの種類です。

タイプ

IDispatch

プラットフォーム呼び出しと vtable

String

BStr

wchar *

Object

Variant

null

Boolean

VARIANT_BOOL

byte

Array

SafeArray

C スタイル配列

.NET Compact Framework なし; 自動レイアウト構造体としてプラットフォームを通じてクラスは、 StructLayoutAttribute marshals を呼び出すフル .NET Framework COM 呼び出し可能ラッパー (CCW) としてをマーシャリングします。

.NET Compact Framework SafeArray FADF_FIXEDSIZE とマークし、サイズをネイティブ コードで変更した例外をスローこと注意ください。

Boolean ネイティブなバイト型に変換先の場合、戻り値の型、として Boolean をマーシャリングすることはできません。それを引数としてのみマーシャリングできます。

デリゲートのマーシャリング

既定では、デリゲートは、関数ポインターとしてマーシャリングされます。 FunctionPtr のインスタンスを作成するも明示的に UnmanagedType 列挙体の MarshalAsAttribute 値を使用することができます。 例については「関数ポインターとしてのデリゲートのマーシャリング」を参照してください。

文字セットの指定

プラットフォームでのマーシャリングの文字列を呼び出すときに、文字セットを指定の CharSetDllImportAttribute フィールドを使えます。

次の 2 つの値を .NET Compact Framework にサポートします。

  • Auto. 文字列は、適切な文字、Unicode 文字セットは、オペレーティング システムの設定を使用してマーシャリングされます。 この値は既定値です。

  • Unicode. 文字列は、Unicode 文字セットを使用してマーシャリングされます。

Ansi 値が Windows Embedded CE が Unicode しかためにサポートされていません。 None Ansi にははサポートされていませんです。

.NET Compact Framework ExactSpelling フィールドをサポートしていない、ため、共通言語ランタイムは自動的に CharSet で指定された値によれば、エントリ ポイント検索されます。

オブジェクトを固定するとき

.NET Compact Framework 共通言語ランタイム marshals、プラットフォームの間、オブジェクト、オブジェクトが固定されることを確認する呼び出し場合、ガベージ コレクターはいない解放またはオブジェクトを移動します。

メモリ使用量

次のガイドラインを使用して、.NET Compact Framework でアンマネージ コードとメモリを処理します。

  • 常にマネージ コードでメモリを割り当てるし、アンマネージ コードに渡します。

  • アンマネージ コードがマネージ コンポーネントへのポインターを保持、する場合は GCHandle 構造を使用してオブジェクトを手動で固定する必要があります。

.NET Compact Framework 共通言語ランタイムの coinitializes スレッド起動時に couninitializes、シャットダウン時にします。 スレッドは、フリー スレッドとしてマークされます。

参照

処理手順

方法 : ログ ファイルを作成します。

概念

ログ ファイルの情報

その他の技術情報

.NET Compact Framework の相互運用性