VisualStudio(VC)では文字セットをUNICODEの場合と、マルチバイトの場合では文字型CString、ワイド文字列wchar_t、マルチバイトcharの互換性がとれなかったりします。
そこで、それぞれに文字型の互換性を保つ為に使用するAPIを以下に掲載します。
UNICODEの場合
WideCharToMultiByte() // wchar_t → char変換
MultiByteToWideChar() // char → wchar_t変換
MultiByteToWideChar() // char → wchar_t変換
[ 文字列長 ]
// バイト文字列(Char)の場合
strlen() ; // char文字列長
strcpy_s() ; // char文字コピー
sprintf_s() ; // 文字フォーマット
strlen() ; // char文字列長
strcpy_s() ; // char文字コピー
sprintf_s() ; // 文字フォーマット
// WideChar(wchar_t)の場合
_tcsrlen(); // 文字列長
_tcscpy() ; // 文字コピー
swprintf_s() ; // 文字フォーマット
_tcsrlen(); // 文字列長
_tcscpy() ; // 文字コピー
swprintf_s() ; // 文字フォーマット
// MFC文字列(CString)の場合
GetLength(); // 文字列数
GetAllocLength(); // 文字列長
CString a = CString b ; // そのままコピー
GetLength(); // 文字列数
GetAllocLength(); // 文字列長
CString a = CString b ; // そのままコピー
マルチバイトの場合
// String→wchar_t(LPWSTR / LPCWSTR)変換処理
// コール元で開放を行う事
wchar_t* DShowUtil::String2wchar_t(System::String ^str){
wchar_t *ret = (wchar_t *)malloc(str->Length);
int i = 0;
for(i = 0 ; i < str->Length ; i++){
ret[i] = str[i] ;
}
ret[i] = ‘\0’;
return ret ;
}
// コール元で開放を行う事
wchar_t* DShowUtil::String2wchar_t(System::String ^str){
wchar_t *ret = (wchar_t *)malloc(str->Length);
int i = 0;
for(i = 0 ; i < str->Length ; i++){
ret[i] = str[i] ;
}
ret[i] = ‘\0’;
return ret ;
}
// String→char変換処理
// コール元で開放を行う事
char* DShowUtil::String2char(System::String ^str){
return(char*)(void*)Marshal::StringToHGlobalAnsi(str) ;
}
// コール元で開放を行う事
char* DShowUtil::String2char(System::String ^str){
return(char*)(void*)Marshal::StringToHGlobalAnsi(str) ;
}