0

システムのロケール構成またはそのシステムのキーボード タイプ構成は、カーネル レベルで呼び出される API に影響しますか? 具体的には、プログラムが「CreateFile()」API を呼び出している場合、Windows API のドキュメントには、呼び出しが CreateFileA または CreateFileW のいずれかに委任されると記載されています。そのプログラムが中国語キーボードを備えた中国に存在するシステムで実行されている場合、2 つの関数のどちらが呼び出されますか?

4

1 に答える 1

0

Unicode と Locale は、完全に直交する 2 つの概念です。

CreateFileAvsに関してCreateFileW- これを制御する設定はコンパイル時の設定です。アプリケーションが Unicode 文字セットで実行するCreateFileWようにコンパイルされている場合、コンパイル設定でアプリケーションをマルチバイト アプリケーションとしてコンパイルする必要があることが示されている場合、 が呼び出されます。その後、CreateFileA呼び出されます。

Visual Studio C++ を使用している場合は、アプリケーションのプロジェクト設定を調べます。[構成プロパティ] の下の [一般] ページには、[文字セット] の設定があります。これは、[Unicode 文字セットを使用] または [マルチバイト文字セットを使用] に設定できます。この設定の効果は、別のプロパティ シートをソリューションに自動的に追加することです - プロパティ マネージャーの下に表示されます: 「Unicode サポート」プロパティ シートは、プリプロセッサ定義 " _UNICODE,UNICODE" を追加します - 「マルチバイト文字サポート」プロパティ シートは、代わりに "_MBCS を追加します"。

ここで、定義をCreateFile見ると、それがマクロそのものであることがわかります。アプリケーションをビルドするとCreateFile、コード内のすべての呼び出しは、定義されてCreateFileWいる場合は呼び出しに解決され、そうでない場合は呼び出しに解決されます。UNICODECreateFileA

UNICODEwindows.hWindows API 呼び出しの Wide バージョンと Ansi バージョンを切り替えるために使用されます。

_MBCSまた_UNICODE、Microsoft C ランタイム ヘッダー (主に tchar.h) によって使用され、c-library がシングル バイトからマルチバイト、さらにそれをサポートする関数の Unicode 文字をサポートするように切り替えます。

于 2012-04-12T11:24:55.007 に答える