COM的DLL里有这么个方法
STDMETHODIMP XXXXX::Decode(long lDispHex, BSTR srcString, BSTR *retVal)
{
unsigned char* pDestBuf = NULL;
...*retVal = _bstr_t((char*)pDestBuf).copy();
...}这句*retVal = _bstr_t((char*)pDestBuf).copy();执行后
有时候,返回的字符串会丢失一部分,如:原本pDestBuf的值是“ABC“
执行上面语句后回变成“AB”
pDestBuf中的内容是UTF-8的字符串
请问,谁知道这么回事
这种情况下,有什么其他的返回值设置方法
谢谢先

解决方案 »

  1.   

    CString ls_str;
    CAtlString ls_atlstr;
    unsigned char* pDestBuf = NULL;
    ls_str.format("%s",pDestBuf);
    ls_atlstr=ls_str;
    BSTR bstr = ls_atlstr.AllocSysString();
    沒有調試過你自已試試也可能是
    CAtlString ls_atlstr;
    ls_atlstr.format("%s",pDestBuf);
    BSTR bstr = ls_atlstr.AllocSysString();
      

  2.   

    *retVal = _bstr_t((char*)pDestBuf).copy();
    不需要copy就行了,因为这种付值本身就有了一个copy
    *retVal = _bstr_t((char*)pDestBuf);
      

  3.   

    使用从char *到bstr转换函数_com_util:convertStringToBSTR(变量名);
      

  4.   

    STDMETHODIMP XXXXX::Decode(long lDispHex, BSTR srcString, BSTR *retVal)
    中,你传入的最后一个参数的内存不够,比如你分配了15字节,但是你在里边copy时,copy了20字节。
    出来时,你看到了什么? 呵呵,只有15字节
      

  5.   

    原本pDestBuf的值是“ABC“
    执行上面语句后回变成“AB”-----------------------------------------
    是谁变成了"AB"