4

DllImport を使用して関数をインポートする場合、使用する CharSet を指定できます。C#、C++、および Visual Basic では、.Net ランタイムがデフォルトで Unicode ではなく Ansi を使用することに気付きました。したがって、A バージョンと W バージョンを持つシステム コールでは、デフォルトで A バージョンが呼び出されます。.Net は内部で Unicode を使用しており、間違っていなければ新しいバージョンの Windows もすべてを Unicode に変換するため、マーシャリングのオーバーヘッドが大幅に増加します。

私は常にここでユニコードを指定する習慣に陥っていますが、これは正しい方法ですか、それとも問題を引き起こしますか?

4

1 に答える 1

6

ANSI バリアントを使用すると、(たとえば) 使用されている ANSI コードページで表現できない名前のファイルがある場合に問題が発生します。Unicode を使用することの唯一の欠点は、Windows の古い Win9x バージョン (95、98、および ME) ではコードがうまく機能しない可能性があることです。

ANSI を使用しなければならない関数がいくつかあります。これらの関数は実際には ASCII (GetProcAddress など) を使用するためです。

于 2008-10-17T11:13:17.263 に答える