在发送给mysql服务器的SQL编码时,CLR的System::String类型需要转成MultiByte类型的String。
使用了wcstombs_s进行转换,之前需要setlocale设定转换字符集。
setlocale(LC_ALL,"chs_chn.936");
意味着中国语_中国地区_GBKcodepage。
int tsql::f_StringToChar(System::String ^pStr, // 被转换的System::String
char **pOut, // 转换出的char 数组
int * piSize) // 转换出的大小.
{
pin_ptr<const wchar_t> wch = PtrToStringChars(pStr);
// Convert to a char*
size_t origsize = wcslen(wch) + 1;
const size_t newsize = origsize * sizeof(wchar_t);
size_t convertedChars = 0;
if (*pOut == NULL)
{
*pOut = new char [newsize];
if (piSize)
*piSize = (int)newsize;
}
else
{
if (piSize)
{
if (*piSize < (int)newsize)
{
delete [] *pOut;
*pOut = new char [newsize];
if (piSize)
*piSize =(int) newsize;
}
}
}
setlocale(LC_ALL,"chs_chn.936"); // 等于LC_ALL,""
wcstombs_s(&convertedChars, *pOut, newsize, wch, newsize);
return newsize;
}