我有一个COleVariant被设置为VT_NULL,当我尝试并将bstrVal成员转换为CString时,我得到了垃圾。在我的程序的旧版本中,我不会收到垃圾,我得到一个空的CString,这是我想要的行为。这是有问题的代码的简化版本:将COleVariant转换为CString
COleVariant myCOleVariant;
myCOleVariant.vt = VT_NULL;
CString myCString = myCOleVariant.bstrVal;
myCOleVariant从数据库字段,它可以包含一个字符串或可以包含空集。数据库包含混合类型,因此使用COleVariant。在导致我的问题的特定情况下,数据库字段为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或会影响COleVariants工作方式的Windows 7改变了吗?我在我的程序中使用了很多变体,并且担心可能会有其他更改会导致这样的错误。
我正在使用VS 2008专业版。任何意见或想法都会受到赞赏,因为我对这种无法解释的行为变化感到困惑。对vaugue问题抱歉。如果我足够了解问题的话,我可能不需要问这个问题。
你描述的是不能在Windows XP(x86,SP3)上重现... – 2011-11-18 10:42:02
@等待被删除当我在XP上运行我的程序myCString将是空的,只有当我升级到Windows 7,问题,你使用XP的结果是什么?一个空的字符串或一个充满垃圾的字符串? –