dllimportでAnsiまたはUnicode文字セットを使用する必要がありますか?
質問
DllImportを使用して関数をインポートする場合、使用するCharSetを指定できます。 C#、C ++、およびVisual Basicでは、.NetランタイムはデフォルトでUnicodeの代わりにAnsiを使用することに気付きました。そのため、AバージョンとWバージョンを持つシステムコールでは、デフォルトでAバージョンが呼び出されます。 .Netは内部的にunicodeを使用します。誤解しない限り、Windowsの新しいバージョンもすべてをUnicodeに変換するため、追加のマーシャリングオーバーヘッドが多くなります。
ここで常にユニコードを指定する習慣になりましたが、これが物事を行う正しい方法ですか、これは問題を引き起こしますか?
解決
ANSIバリアントを使用する場合、(たとえば)使用されているANSIコードページでは表現できない名前のファイルがあると、問題が発生します。 Unicodeを使用する場合の唯一の欠点は、Windowsの古いWin9xバージョン(95、98、およびME)ではコードがうまく機能しない可能性があることです。
実際にはASCII(たとえばGetProcAddress)を使用するため、ANSIを使用する必要がある関数がいくつかあります。
所属していません StackOverflow