Share via


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