#author("2024-02-03T10:11:06+00:00","default:iseki","iseki") #author("2024-02-03T10:11:27+00:00","default:iseki","iseki") ** VC++ (Unicodeよ.勘弁してくれ!) - [[Visual Studio 一般>Visual Studio]] *** sjis -> unicode - 構成プロパティ - 詳細 - 文字コード - ''Unicode'' 文字セットを使用する(マルチバイトから変更) - 構成プロパティ - C/C++ - すぺてのオプション - その他のオプション - ''/utf-8'' を追加 - リソースファイルの ''#pragma code_page(932)'' を ''#pragma code_page(65001)'' に変更. -- その他の ''932'' も ''65001'' に. *** コンパイラ - ''_UNICODE'' を定義する *** MFC ライブラリ - ''nafxcw.lib'': Release version - ''nafxcwd.lib'': Debug version (default) - ''uafxcw.lib'': Release version with Unicode support - ''uafxcwd.lib'': UAFXCWD.LIB Debug version with Unicode support - マルチバイトでコンパイルしたものと,uicodeでコンパイルしたものをリンクさせると,nafxcw と uafxcw の競合エラーの嵐が起こる. uafxcwd.lib(barcore.obj) : error LNK2005: "public: void __thiscall CControlBar::OnDestroy(void)" (?OnDestroy@CControlBar@@QAEXXZ) は既に nafxcwd.lib(barcore.obj) で定義されています。 *** 文字コード変換 **** いろいろ面倒(何が何だか さっぱりさっぱり) - キャストはできる限りやらないほうが良い気がする. - char[] から LPWSTR に変換できません : (LPWSTR)char[] - char[] から LPCTSTR へ変換できません : (LPCTSTR)char[] - LPCSTR から LPCWSTR に変換できません : (LPCWSTR)char[] - const char[] から wchar_t に変換できません : _T(const char[])) or TEXT(const char[]) - CString から LPCSTR に変換できません : jbxwl::ts2mbs(CString) - https://untitled-note.com/vcpp-cstring-convert/ **** 変換関数 - str.GetString() <pre> CString str; char_t* char = str.GetString(); CStringW wstr; wchar_t* char = wstr.GetString(); </pre> - [[JunkBox_Win_Lib/WinBaseLib/WinTools.h>https://github.com/JunkBox-Library/JunkBox_Win_Lib/blob/main/WinBaseLib/WinTools.h]] -- jbxwl::mbs2ts(char* str) : 文字列 str から CString を返す. -- jbxwl::ts2mbs(LPCTSTR str) : CString から 文字列を返す.要 free() <pre> Buffer tc2Buffer(TCHAR* tchar, int size=-1); Buffer ts2Buffer(LPCTSTR str, int size=-1); CString mbs2ts(char* str); inline char* ts2mbs(LPCTSTR str) // 要 free. NULL は絶対に返ってこない { Buffer buf = ts2Buffer(str); return (char*)buf.buf; } // int copy_ts2Buffer(LPCTSTR str, Buffer* buf); int cat_ts2Buffer (LPCTSTR str, Buffer* buf); </pre>