最初的目的是为了fix一个零件属性的显示名的大小写bug,弄到最后,整一个字符串转换游戏!!!
最初是通过com接口拿到属性的显示名字,本来是由api提供的函数,跟我没啥关系。既然bug报上来了,哪怕傻点,这个bug也要解决啊,于是……
CComBSTR name;
pProp->get_DisplayName(&name); //假设已经拿到名字值,只是值不符合大小写规范
字符串游戏正式拉开序幕!
BSTR bstrText = name.m_str; //先拿到BSTR值;
CString str(bstrText); //转换成CString
int nLen = str.GetLength();
TCHAR cTemp = str.GetAt(0); //返回的竟然是TCHAR类型
//
int iLen = 2 * wcslen(&cTemp);
char* chRtn = new char[iLen + 1];
wcstombs(chRtn, &cTemp, iLen + 1); //干吗呢,原来为了用个大小写转化函数,要把THAR转化为char类型
strupr(chRtn); //就为了用你,搞的那么麻烦
str.SetAt(0, *chRtn); //又要转化为TCHAR,不管了,先用char试试,竟然可以了!!!好奇怪
for (int i = 1; i < nLen; i++)
{
if(str.GetAt(i - 1) == ' ')
{
cTemp = str.GetAt(i);
//
int iLen = 2 * wcslen(&cTemp);
char* chRtn = new char[iLen + 1];
wcstombs(chRtn, &cTemp, iLen + 1);
strupr(chRtn);
str.SetAt(i, *chRtn);
}
}
//name = _com_util::ConvertStringToBSTR(str); //本来想用这个,结果要char*类型的,晕
name = str.AllocSysString(); //再把CString转化为BSTR类型。庆幸没有还要做成CComBSTR
难道是自己搞复杂了?