DllImportAttribute.ThrowOnUnmappableChar DllImportAttribute.ThrowOnUnmappableChar DllImportAttribute.ThrowOnUnmappableChar DllImportAttribute.ThrowOnUnmappableChar Field


マップできない Unicode 文字 (ANSI の "?" に変換される文字) が見つかったときに、例外をスローするかどうかを指定します。Enables or disables the throwing of an exception on an unmappable Unicode character that is converted to an ANSI "?" character.

public: bool ThrowOnUnmappableChar;
public bool ThrowOnUnmappableChar;
val mutable ThrowOnUnmappableChar : bool
Public ThrowOnUnmappableChar As Boolean 


場合によっては、Visual Basic 開発者が使用して、 DllImportAttribute DLL 関数を使用する代わりに、マネージ コードで定義する、Declareステートメント。In some cases, Visual Basic developers use the DllImportAttribute to define a DLL function in managed code, instead of using the Declare statement. 設定、ThrowOnUnmappableCharフィールドは、そのような場合の 1 つです。Setting the ThrowOnUnmappableChar field is one of those cases. 次の例は、厳密に適用する方法を示しています。 文字のマッピングのセキュリティをプラットフォーム呼び出しメソッドの定義を ANSI 文字セットを指定する、最適マッピングの動作を無効にすると、マップされていない Unicode 文字に例外をスローしています。The following example shows how to apply the strictest character mapping security to a platform invoke method definitions by specifying the ANSI character set, disabling best fit mapping behavior, and throwing an exception on unmapped Unicode characters.

[DllImport("My.dll", CharSet=CharSet::Ansi,
int SomeFuncion2(int parm);
[DllImport("My.dll", CharSet = CharSet.Ansi,
    BestFitMapping = false,
    ThrowOnUnmappableChar = true)]
internal static extern int SomeFuncion2(int parm);
<DllImport("My.dll", CharSet:=CharSet.Ansi,
Friend Shared Function SomeFuncion2(parm As Integer) As Integer
End Function


true 例外には、毎回がスローされます、相互運用マーシャラーは; マップできない文字に変換しますfalseことを示す、ThrowOnUnmappableCharフィールドが無効になります。true to indicate that an exception is thrown each time the interop marshaler converts an unmappable character; false to indicate that the ThrowOnUnmappableChar field is disabled. このフィールドはfalse既定。This field is false by default.

共通言語ランタイムは、Windows 98 または Windows me. で実行する非管理対象のメソッドに渡される Unicode 文字が管理している ANSI 文字に変換します。The common language runtime converts to ANSI characters any managed Unicode characters passed to an unmanaged method executing on Windows 98 or Windows Me. 最適マッピングには、完全一致が存在しない場合は、近い文字を提供する相互運用マーシャラーができます。Best-fit mapping enables the interop marshaler to provide a close-matching character when no exact match exists. たとえば、マーシャラーには、Unicode の著作権文字を ANSI 文字を許可する非管理対象のメソッドには、'c' に変換します。For example, the marshaler converts the Unicode copyright character to 'c' for unmanaged methods that accept ANSI characters. 一部の文字がない最適の表現。これらの文字といいます。Some characters lack a best-fit representation; these characters are called unmappable. マップできない文字が既定値に変換する、通常は '?'ANSI 文字です。Unmappable characters are usually converted to the default '?' ANSI character.


特定の Unicode 文字が円記号など、危険な文字に変換されます '\' 文字で、パスを誤って変更することができます。Certain Unicode characters are converted to dangerous characters, such as the backslash '\' character, which can inadvertently change a path. 設定して、ThrowOnUnmappableCharフィールドをtrue例外をスローして、呼び出し元にマップできない文字の存在を示すことができます。By setting the ThrowOnUnmappableChar field to true, you can signal the presence of an unmappable character to the caller by throwing an exception.


によって提供される既定値を変更することはできません、BestFitMappingThrowOnUnmappableCharフィールドを非管理対象のセーフ配列に ANSI 文字または LPSTRs 要素を持つマネージ配列を渡すことができます。You cannot change the default values provided by the BestFitMapping and ThrowOnUnmappableChar fields when passing a managed array whose elements are ANSI Chars or LPSTRs to an unmanaged safe array. 最適マッピングが常に有効にして、例外はスローされません。Best-fit mapping is always enabled and no exception is thrown. この組み合わせに、セキュリティ モデルが損なわれる可能性があります。Be aware that this combination can compromise your security model.