将COleVariant转换为CString

时间:2011-11-18 09:02:39

标签: c++

我有一个设置为VT_NULL的COleVariant,当我尝试将bstrVal成员转换为CString时,我得到了垃圾。在我的程序的旧版本中,但是我没有垃圾,我得到一个空的CString,这是我想要的行为。以下是违规代码的简化版本:

    COleVariant myCOleVariant;
    myCOleVariant.vt = VT_NULL;
    CString myCString = myCOleVariant.bstrVal;

myCOleVariant是从数据库字段设置的,该字段可以包含字符串或可以包含NULL。数据库包含混合类型,因此使用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或Windows 7的最新版本中是否有任何改变会影响COleVariants的工作方式?我在我的程序中经常使用COlevariants,我担心可能会有其他更改会导致这样的错误。

我正在使用VS 2008专业版。任何意见或想法都会受到赞赏,因为我对这种无法解释的行为变化感到非常困惑。为vaugue问题道歉。如果我知道的话可以正确地问它,我可能不需要问它。

1 个答案:

答案 0 :(得分:3)

当VARIANT.vt == VT_EMPTY或VARIANT.vt == VT_NULL时,无法保证其余字段为零。

您的解决方法功能是正确的方法。我只建议使用const COleVariant&作为参数,以避免不必要的COleVariant对象复制。