最初的目的是为了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
难道是自己搞复杂了?