DllImportAttribute.BestFitMapping フィールド

定義

Unicode 文字を ANSI 文字に変換するときの、最適マッピング動作のオン/オフを切り替えます。Enables or disables best-fit mapping behavior when converting Unicode characters to ANSI characters.

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

フィールド値

Boolean

場合によっては、Visual Basic 開発者がステートメントではなくを使用して、 DllImportAttribute Declare マネージコードで DLL 関数を定義することがあります。In some cases, Visual Basic developers use the DllImportAttribute, instead of the Declare statement, to define a DLL function in managed code. フィールドの設定 BestFitMapping は、これらのケースの1つです。Setting the BestFitMapping 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,
    BestFitMapping = false,
    ThrowOnUnmappableChar = true)]
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,
    BestFitMapping:=False,
    ThrowOnUnmappableChar:=True)>
Friend Shared Function SomeFuncion2(parm As Integer) As Integer
End Function

注釈

trueの場合、最適マッピング動作が有効になります。それ以外の場合は、最適マッピングが無効になります。If true, best-fit mapping behavior is enabled; otherwise, best-fit mapping is disabled. BestFitMapping既定では、このフィールドはです trueThe BestFitMapping field is true by default. このフィールドの設定は、属性のすべてのレベル設定より優先され System.Runtime.InteropServices.BestFitMappingAttribute ます。Settings for this field override the any level settings for the System.Runtime.InteropServices.BestFitMappingAttribute attribute.

共通言語ランタイムは、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. たとえば、ANSI 文字を受け入れるアンマネージメソッドの場合、マーシャラーは Unicode の著作権文字を ' 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.

注意事項

BestFitMapping ThrowOnUnmappableChar 要素が 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.

適用対象

こちらもご覧ください