将colvariant转换为CString
Convert COleVariant to CString
我有一个COleVariant设置为VT_NULL,当我尝试将bstrVal成员转换为CString时,我得到垃圾。在我的程序的旧版本,但我没有得到垃圾,我得到一个空的CString,这是我想要的行为。下面是问题代码的简化版本:
COleVariant myCOleVariant;
myCOleVariant.vt = VT_NULL;
CString myCString = myCOleVariant.bstrVal;
myCOleVariant是从数据库字段设置的,该字段可以包含字符串,也可以包含NULL。数据库包含混合类型,因此使用colvariant。在导致我的问题的具体情况下,数据库字段为NULL,转换为CString之前的COleVariant设置为VT_NULL。
一个简单的解决方法是添加一个函数: CString COleVariantAsCString(COleVariant pVar)
{
CString retval;
if(pVar.vt == VT_NULL || pVar.vt == VT_EMPTY)
retval = _T("");
else
retval = pVar.bstrVal;
return retval;
}
我的问题是:最近版本的visual studio或windows 7中有什么变化会影响COleVariants的工作方式吗?我在我的程序中使用了很多协变,我担心可能会有其他的改变会导致这样的错误。
我正在使用VS 2008专业版。任何输入或想法将不胜感激,因为我对这种无法解释的行为变化感到非常困惑。为这个模糊的问题道歉。
根本不能保证当VARIANT。vt == VT_EMPTY或VARIANT。vt == VT_NULL,其余字段为零。
你的变通函数是正确的方法。我只建议使用const COleVariant&
作为参数,以避免不必要的colvariant对象复制。
相关文章:
- 如何将 CString 转换为字节 [] 数组?
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- 将 CString 转换为字符类型
- 将cstring转换为camelcase
- 从 ATL::CString 转换为 C++ 中的字符串
- 将 ATL::CString 转换为 std::vector<unsigned char>
- 将 ATL CString 转换为字符数组
- 如何将 CString 转换或转换为 LPWSTR
- 如何将 CString 转换为 UCHAR 数组
- 将 MFC 的 CString 转换为 ASCII 和 UNICODE 的 int
- 需要将cstring转换为byte*,并需要在c++函数中将其作为i/p参数传递
- 将CString转换为const byte*的Unicode项目
- 我如何将CString转换为BYTE
- 将MFC CString转换为无符号整数
- 隐式将CString转换为char*
- 如何将CString转换为CByteArray
- 如何将ATL/MFC CString转换为QString
- 在mfc中将CString转换为float
- 将宽CString转换为char*
- 如何将CString转换为ofstream