BestFitMappingAttribute クラス
メモ : この名前空間、クラス、およびメンバは、.NET Framework Version 1.1 だけでサポートされています。
Unicode 文字を最も近い ANSI 文字に変換するかどうかを制御します。
この型のすべてのメンバの一覧については、BestFitMappingAttribute メンバ を参照してください。
System.Object
System.Attribute
System.Runtime.InteropServices.BestFitMappingAttribute
<AttributeUsage(AttributeTargets.Assembly Or AttributeTargets.Class _
Or AttributeTargets.Struct Or AttributeTargets.Interface)>
NotInheritable Public Class BestFitMappingAttribute Inherits Attribute
[C#]
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class
| AttributeTargets.Struct | AttributeTargets.Interface)]
public sealed class BestFitMappingAttribute : Attribute
[C++]
[AttributeUsage(AttributeTargets::Assembly |
AttributeTargets::Class | AttributeTargets::Struct |
AttributeTargets::Interface)]
public __gc __sealed class BestFitMappingAttribute : public Attribute
[JScript]
public
AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class |
AttributeTargets.Struct | AttributeTargets.Interface)
class BestFitMappingAttribute extends Attribute
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
この属性は、アセンブリ、インターフェイス、クラス、または構造体に適用できます。
Windows 98 または Windows Me で実行するアンマネージ メソッドにマネージ Unicode 文字が渡された場合、既定では、このような Unicode 文字は共通言語ランタイムによって ANSI 文字に変換されます。最適マッピングを使用すると、完全一致が存在しないときに、 相互運用マーシャラ が最も近い文字を選択します。たとえば、マーシャラは、ANSI 文字を許可するアンマネージ メソッドの場合、Unicode の著作権記号を 'c' に変換します。
注意 一部の文字には最適形式が存在しません。このような文字はマップできない文字といいます。マップできない文字は原則として、既定の '?' ANSI 文字に変換されます。特定の Unicode 文字は、意図せずパスを変更するおそれがある円記号 "\" など、危険な文字に変換されます。
BestFitMappingAttribute には、最適マッピングの動作を制御するためのパラメータが 2 つ用意されています。1 番目のパラメータは、最適マッピングのオン/オフを切り替えるために使用します。既定値は true です。この場合、アセンブリ レベル、インターフェイス レベル、クラス レベルで最適マッピングが有効になります。属性がインターフェイスまたはクラスに適用された場合、アセンブリ レベルの属性はオーバーライドされます。同様に、 DllImportAttribute.BestFitMapping フィールドを使用することによって、プラットフォーム呼び出しの最適マッピングのオン/オフを切り替えることもできます。プラットフォーム呼び出しのフィールドで値を設定すると、すべてのレベルの BestFitMappingAttribute がオーバーライドされます。
2 番目のパラメータでは、マップできない文字があったときに例外をスローするかどうかを制御します。 ThrowOnUnmappableChar フィールドの既定値は false です。この場合、共通言語ランタイムが '?' ANSI 文字に変換される Unicode 文字に遭遇するたびに例外がスローされることはありません。最適マッピングが true の場合でも、 ThrowOnUnmappableChar フィールドが true の場合は、マップできない文字が見つかったときに例外が生成されます。セキュリティを高めるには、1 番目のパラメータを false に設定し、2 番目のパラメータを true に設定します。このパラメータの組み合わせでは、最適マッピングがオフになりますが、安全対策として例外がスローされるようになります。
注意 アンマネージ セーフ配列への ANSI の Chars または LPSTR が要素となっているマネージ配列を渡す場合は、 BestFitMappingAttribute の既定値を変更できません。最適マッピングは常に有効となり、例外はスローされません。この組み合わせの場合、セキュリティ モデルが損なわれるおそれがあります。
使用例
[Visual Basic, C#] 最適マッピングを無効にして、Unicode 文字が '?' ANSI 文字に変換されたときに例外をスローする例を次に示します。この方法で BestFitMappingAttribute のパラメータを設定すると、セキュリティを高めることができます。
<BestFitMapping(False, ThrowOnUnmappableChar := True)> _
Interface IMyInterface1
'Insert code here.
End Interface
[C#]
[BestFitMapping(false, ThrowOnUnmappableChar = true)]
interface IMyInterface1
{
//Insert code here.
}
[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Runtime.InteropServices
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
BestFitMappingAttribute メンバ | System.Runtime.InteropServices 名前空間 | BestFitMapping