DllImportAttribute.ThrowOnUnmappableChar フィールド
メモ : この名前空間、クラス、およびメンバは、.NET Framework Version 1.1 だけでサポートされています。
マップできない Unicode 文字 (ANSI の '?' に変換される文字) が見つかったときに、例外をスローするかどうかを指定します。
Public ThrowOnUnmappableChar As Boolean
[C#]
public bool ThrowOnUnmappableChar;
[C++]
public: bool ThrowOnUnmappableChar;
[JScript]
public var ThrowOnUnmappableChar : Boolean;
解説
true の場合は、マップできない文字に相互運用マーシャラが遭遇するたびに例外がスローされます。 false の場合は、 ThrowOnUnmappableChar フィールドが無効になります。このフィールドの既定値は false です。
Windows 98 または Windows Me で実行するアンマネージ メソッドにマネージ Unicode 文字が渡された場合、このような Unicode 文字は共通言語ランタイムによって ANSI 文字に変換されます。最適マッピングを使用すると、完全一致が存在しないときに、 相互運用マーシャラ が最も近い文字を提供します。たとえば、マーシャラは、ANSI 文字を許可するアンマネージ メソッドの場合、Unicode の著作権記号を 'c' に変換します。一部の文字には最適形式が存在しません。このような文字はマップできない文字といいます。マップできない文字は原則として、既定の '?' ANSI 文字に変換されます。
注意 特定の Unicode 文字は、意図せずパスを変更するおそれがある円記号 "\" など、危険な文字に変換されます。 ThrowOnUnmappableChar フィールドを true に設定すると、マップできない文字があることを例外をスローして呼び出し元に通知できます。
注意 アンマネージ セーフ配列への LPSTR または ANSI Chars が要素となっているマネージ配列を渡す場合は、 BestFitMapping フィールドと ThrowOnUnmappableChar フィールドの既定値を変更できません。最適マッピングは常に有効となり、例外はスローされません。この組み合わせの場合、セキュリティ モデルが損なわれるおそれがあります。
使用例
[Visual Basic, C#] 場合によっては、Visual Basic の開発者は、マネージ コードで DLL 関数を定義する際、 Declare ステートメントを使用する代わりに、 DllImportAttribute を使用します。 ThrowOnUnmappableChar フィールドの設定は、このような事例の 1 つです。ANSI 文字セットを指定することによって最も厳しい文字マッピング セキュリティをプラットフォーム呼び出しメソッドの定義に適用し、最適マッピングの動作を無効にし、マップできない Unicode 文字に遭遇したときに例外をスローさせる例を次に示します。
<DllImport( "My.dll", Charset := Charset.Ansi, _
BestfitMapping := False _
ThrowOnUnmappableChar := True )>
[C#]
[DllImport( "My.dll", Charset = Charset.Ansi,
BestfitMapping = false
ThrowOnUnmappableChar = true )]
[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
DllImportAttribute クラス | DllImportAttribute メンバ | System.Runtime.InteropServices 名前空間 | CharSet | BestFitMapping