質問: 現在、RAD Studio 10.3でプログラミングを行っています。 ``` char Buf[256]; ---------------(中略)--------------------- GetPrivateProfileString("LANG_JPN","TOOLBAR_SERVER_STOP","Stop",Buf,40,".\\Japan.ini"); ``` exeファイルと同じフォルダにあるJapan.iniファイルから文字データを取り出そうとしているようなのですが、次のようなエラーが発生します。 ``` [bcc32c エラー] Main.cpp(1383): no matching function for call to 'GetPrivateProfileStringW' winbase.h(4417): candidate function not viable: no known conversion from 'const char [9]' to 'LPCWSTR' (aka 'const wchar_t *') for 1st argument ``` このエラーの回避方法を教えて下さい。
回答: 質問者さんの一連の質問を読む限り、ご自身で書かれたコードではなく他人の書かれたコードを移植していると理解しました。 他人の書いたコードをANSI / Unicode変換するのは危険です。タグ指定されているC++言語とはあまり関係なく、RAD Studio側だと思いますが、元通りANSIでビルドされることをおすすめします。 * inet_addr()という関数でエラーがでる * GetPrivateProfileString関数でエラー などは、ANSI / Unicodeを切り替えたことによって発生しているコンパイルエラーですが、このようにエラーが発生してくれる場合はまだいいのですが、 ``` void* memcpy( void *dest, const void *src, size_t count ); ``` `memecpy`などのように`void*`が使われてしまうと、本来ANSI文字列が必要とされている箇所がUnicodeに切り替わっていてもコンパイラーは検出できず、実行時に不可解な現象が発生します。こういったコード上で見えない問題を回避するためにもANSIでビルドすべきです。 最近あった例で「Windows 10」のシャットダウンを妨げる謎の「G」アプリ、マイクロソフトが説明では ``` L"GDI+ Hook Window" ``` というUnicode文字列をANSI APIに渡してしまったがために`"G"`と解釈されてしまう現象を引き起こしています。