KEN's .NET

[Ref2] GetPrivateProfileString関数の様々な宣言法によるWin2000、Win98での実行結果の成否

ホーム > KEN's .NET > [Ref2] GetPrivateProfileString関数の様々な宣言法によるWin2000、Win98での実行結果の成否

[特集6] GetPrivateProfileStringにみるAPIの使用方法 でAPI関数の使用法の解説記事を書くにあたって行った実験とその結果です。Auto、Ansi、Unicodeのいずれか指定すれば、 引数/戻り値の文字列は、この指定に従った文字コードのデータと解釈されるはずなんですが、この指定が本当に有効か?は実際には非常に怪しいです。 下記の表に示した実験結果からは信用できないように思われます。

この実験に使用したプログラムでは、日本語パスを含むフォルダ/英数字のみのiniファイル、日本語/英数字のセクション、 日本語/英数字のキー、日本語/英数字のデフォルト値のそれぞれで実験できるようにしています。 特に日本語を含む場合に焦点を当てて実験しています。

下記の表では次の3つの内容で分類しています。
  1. 文字セットの指定をどうしたか?(Auto、Ansi、Unicode)
  2. MarshalAs属性はどのように付加したか?(LPStr、LPTStr、LPWStr、指定なし)
  3. 直接、その関数を呼んだのか?それとも、デリゲートのInvokeメソッド経由で呼び出したか?
また、実験結果のOK、NG、Errorの意味は次の通りです。
GetPrivateProfileString関数Auto/Ansi
/Unicode
AliasMarshalAs直接呼出しInvoke経由
Win2KWin98Win2KWin98
GetPrivateProfileStringAnsiALPStrAnsiALPStrOKOKOKOK
GetPrivateProfileStringAnsiALPTStrLPTStrNGOKNGOK
GetPrivateProfileStringAnsiALPWStrLPWStrNGNGNGNG
GetPrivateProfileStringAnsiA NGNGOKOK
GetPrivateProfileStringAnsiWLPStrWLPStrNGNGNGNG
GetPrivateProfileStringAnsiWLPTStrLPTStrOKNGOKNG
GetPrivateProfileStringAnsiWLPWStrLPWStrOKNGOKNG
GetPrivateProfileStringAnsiW NGNGNGNG
GetPrivateProfileStringAnsiLPStr LPStrErrorErrorErrorError
GetPrivateProfileStringAnsiLPTStrLPTStrErrorErrorErrorError
GetPrivateProfileStringAnsiLPWStrLPWStrErrorErrorErrorError
GetPrivateProfileStringAnsi ErrorErrorErrorError
GetPrivateProfileStringAutoALPStrAutoALPStrOKOKOKOK
GetPrivateProfileStringAutoALPTStrLPTStrNGOKNGOK
GetPrivateProfileStringAutoALPWStrLPWStrNGNGNGNG
GetPrivateProfileStringAutoA NGNGNGOK
GetPrivateProfileStringAutoWLPStrWLPStrNGNGNGNG
GetPrivateProfileStringAutoWLPTStrLPTStrOKNGOKNG
GetPrivateProfileStringAutoWLPWStrLPWStrOKNGOKNG
GetPrivateProfileStringAutoW OKNGOKNG
GetPrivateProfileStringAutoLPStr LPStrNGOKNGOK
GetPrivateProfileStringAutoLPTStrLPTStrOKOKOKOK
GetPrivateProfileStringAutoLPWStrLPWStrOKNGOKNG
GetPrivateProfileStringAuto OKNGOKOK
GetPrivateProfileStringUnicodeALPStrUnicodeALPStrOKOKOKOK
GetPrivateProfileStringUnicodeALPTStrLPTStrNGOKNGOK
GetPrivateProfileStringUnicodeALPWStrLPWStrNGNGNGNG
GetPrivateProfileStringUnicodeA NGNGNGNG
GetPrivateProfileStringUnicodeWLPStrWLPStrNGNGNGNG
GetPrivateProfileStringUnicodeWLPTStrLPTStrOKNGOKNG
GetPrivateProfileStringUnicodeWLPWStrLPWStrOKNGOKNG
GetPrivateProfileStringUnicodeW OKNGOKNG
GetPrivateProfileStringUnicodeLPStr LPStrErrorErrorErrorError
GetPrivateProfileStringUnicodeLPTStrLPTStrErrorErrorErrorError
GetPrivateProfileStringUnicodeLPWStrLPWStrErrorErrorErrorError
GetPrivateProfileStringUnicode ErrorErrorErrorError

この検証作業を行った環境は下記の通りです。

CPUメモリOS/IE.NET Framework バージョン
PentiumIII 1GHz384MBWindows2000(SP3)、IE6(SP1)1.0.3705.288(SP2)
CPUメモリOS/IE.NET Framework バージョン
モバイルCeleron 366MHz64MBWindows98SE、IE6(SP1)1.0.3705.288(SP2)

この検証作業には次のソースコードを使用しました。

INIApiTest.lzh(ソース、iniファイル等のテストデータ、EXEファイル、Win2kとWin98での実験結果のテキストファイル)

ホーム > KEN's .NET > [Ref2] GetPrivateProfileString関数の様々な宣言法によるWin2000、Win98での実行結果の成否