前回のコードで,文字列の部分を #define で指定.
Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_2$ uconv -f SJIS cc_ml_2.cpp
#include <clocale>
#include <iostream>
#include "i_define.hxx"
#include "_tdefine.hxx"
#include "ccc_mlg.hxx"
#define Name_1_ _T("Name_1")
#define Name_2_ _T("Name_2")
#define Name_3_ _T("Name_3")
#define Name_4_ _T("Name_4")
#define Name_5_ _T("Name_5")
#define Name_1J _T("名称 1")
#define Name_2J _T("名称 2")
#define Name_3J _T("名称 3")
#define Name_4J _T("名称 4")
#define Name_5J _T("名称 5")
bool test (void)
{
{
ccc_mlg* cm = ::get_ccc_mlg() ;
{
ccc_mlg_1 cm_1 ; cm_1.Name = Name_1_ ; cm_1.JPN = Name_1J ;
ccc_mlg_1 cm_2 ; cm_2.Name = Name_2_ ; cm_2.JPN = Name_2J ;
ccc_mlg_1 cm_3 ; cm_3.Name = Name_3_ ; cm_3.JPN = Name_3J ;
ccc_mlg_1 cm_4 ; cm_4.Name = Name_4_ ; cm_4.JPN = Name_4J ;
ccc_mlg_1 cm_5 ; cm_5.Name = Name_5_ ; cm_5.JPN = Name_5J ;
cm->push_back(cm_1) ;
cm->push_back(cm_2) ;
cm->push_back(cm_3) ;
cm->push_back(cm_4) ;
cm->push_back(cm_5) ;
}
std::tout << ccc("Name_2") << std::endl ;
}
return true ;
}
int _tmain(int argc, TCHAR* argv[])
{
_tsetlocale(LC_ALL,_T("")) ;
test() ;
return 0 ;
}
Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_2$ uconv -f SJIS cc_ml_2.cpp > dd.cpp
Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_2$ g++ dd.cpp -Wall
Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_2$ ./a.out
名称 2
Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_2$
#define の部分を別のファイルとして保存.test_ccc.hpp
“㎥” を次の様に指定してみたが,Windows コンソール AP ではうまくいかない.
#define Unit_M_ "Unit_M^3" #ifdef _MSC_VER #ifdef _UNICODE #define Unit_MJ L"\x7acb " L" \x33a5 " L" \x7c73" #else #define Unit_MJ "立米" #endif #else #define Unit_MJ "\xE3\x8E\xA5" #endif
Synology NAS では OK .
文字コードを検索できるサイト
https://www.fileformat.info/info/unicode/char/search.htm
2020/01/20
Windows AP の場合のコードを少し変更.
std::tout << ccc(Name_3_) << std::endl ;
std::tout << ccc(Unit_M_) << std::endl ;
tstring ccc_str ;
ccc_str += ccc(Name_3_) + _T("\r\n") ;
ccc_str += ccc(Unit_M_) + _T("\r\n") ;
::MessageBox(NULL,ccc_str.c_str(),_T("Test"),MB_OK) ;

