描述:
BSTR* pbstrName;
CComBSTR bstrName;
CComPtr<IContact> spContact;
CComVariant vContactInfo;
//DB_FIELD_NAME 是常量,vContactInfo是输出,得到的是电话本的人名字的信息
HRESULT hr = spContact->GetProperty(DB_FIELD_NAME, &vContactInfo);
bstrName = vContactInfo.bstrVal;//
if(bstrName.m_str == NULL)
{
RETAILMSG(1,(L"bstrName.m_st==NULL\n"));
}else{
RETAILMSG(1,(L"bstrName.m_st==%s\n",bstrName.m_str));
}
*pbstrName = bstrName.Detach();
if(*pbstrName == NULL){
RETAILMSG(1,(L"*pbstrName = NULL and bstrNumber=%s\n",bstrNumber));
*pbstrName=bstrNumber;
}else{
RETAILMSG(1,(L"*pbstrName !=NULL\n"));
}
RETAILMSG(1,(L"*****pbstrName=%s\n",*pbstrName));
}
但是不知道为什么,我在电话本中没有设置人名,应该说来bstrName.m_str的值应该是NULL的啊,但是很奇怪并不是NULL,我用%s打印出来的是几个乱码,不知道这是怎么回事呢?
难道BSTR类型的NULL本身就是有数据的? 谢谢
解决方案1:
你需要给它一个初始化值.你所得到的结果是因为你没有初始化.例如,
CComBSTR bstrName("");
解决方案2:
BSTR 其实是个指针,注意这点
解决方案3:怪了,除非你把内存写乱了
解决方案4: BSTR* pbstrName;这种用法错误,这个指针没有指向任何内存。应该这样用:
BSTR pbstrName = NULL;
pbstrName = bstrName.Detach();