bool ABC(BSTR bstr,BSTR* pbstr);
bool CBA(string str,string* pstr);bool abc(BSTR bstr,BSTR* pbstr)
{
    USES_CONVERSION; 
    CString cstr;
    string str;
    string* pstr;
    cstr = W2A(bstr);
    str = (LPCTSTR)cstr;     //给第一个参数赋值这个是正确的
    CBA(str,pstr); //这里的pstr返回后要给pbstr赋值怎么赋值啊
    pbstr = ????  //这里怎么赋值啊,我本来写的是pbstr = A2BSTR(pstr->c_str());
}

解决方案 »

  1.   

    pstr返回后要给pbstr赋值,这里的赋值我不太清楚怎么赋值.也就是CBA函数返回参数string* pstr给ABC函数的返回参数BSTR* pbstr
      

  2.   

    cstr=*pstr;
    *pbstr=cstr.allocsysstring();
    不过我感觉你的代码由问题,注意指针的使用。
    而且CString与设置Unicode编译有关的,所以你的代码不是很好。如果单纯想从asci(char ,我称为窄字符)到unicode(wchar 宽字符)的转换,CString 在非unicode编译时是char,否则wchar。转换函数无非就是w2a等宏。此外,string 是stl提供的,对应的是char,stl同样提供wstring,对应wchar.bstr都是wchar 。如果程序中要用到BSTR,最好用CComBSTR,这样你就不会有内存上问题了。纯的BSTR变量定义后,用完后是一定要释放的,否则内存泄漏。
    我建议程序使用Unicode编译,因为windows 98 第二版及其之后的操作系统api都是使用unicode的,所以可以提高程序运行效率的。
      

  3.   

    楼上朋友cstr=*pstr;不行我编译出现
    error C2679: 二进制“=”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)