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