long CMyDictionary :: GetWordID(CString w)
{
COleVariant kw(w,VT_BSTRT),kwi;
pWords->SetCurrentIndex("word");
if(pWords->Seek("=",&kw)) {
kwi=pWords->GetFieldValue("wid");
return kwi.lVal;
}
else 
return -1;
}
不知道那里跑出来一个kwi.lVal!!!

解决方案 »

  1.   

    这是数据库的应用吧,lVal是COleVariant的成员变量呀,当数据库中"wid"字段中的属性为LONG型时,COleVariant的lVal变量的值才是有效的
      

  2.   

    COleVariant kw(w,VT_BSTRT),   kwi   ;
    你不是 这里定义了一个吗?
      我没有 看懂你什么意思?
     
      

  3.   

    可是我在MSDN中没有看见COleVariant有这样一个成员变量呀!
      

  4.   

    class COleVariant : public VARIANT { ... };lVal 是 VARIANT 结构的一个 union 成员,你可以参考 Oaidl.h 的 VARIANT 定义
      

  5.   

    COleVariant常用于数据库编程中。因为同一个数据库可以用多种语言开发的应用程序访问,而不同的编译器同一数据类型可能有不同的字长,为了使得到结果正确,就特意设了一个COleVariant,以将数据库中的数据正确“翻译”,使VC能够认出来。
    代码
    kwi=pWords->GetFieldValue("wid");
    return kwi.lVal
    表示"wid"域的数据类型为长整型,kwi将之读出后,把它的值作为返回值返回函数。
    相当于 return V_I4(&pWord->GetFieldValue("wid"));在COM编程中你会大量遇上COleVariant.