BSTR str;
LPSTR str1;
str=SysAllocString(OLESTR("This is a Test!"));
int len = strlen((LPSTR)_bstr_t(str));
str1 = new char[len];
strcpy(str1,(LPSTR)_bstr_t(str));
AfxMessageBox(LPCTSTR(str1)); //正常
AfxMessageBox(LPSTR(_bstr_t(str)));

解决方案 »

  1.   

    是可以了,str1 = new char[len];
    分配了一定的内存,
    最后需要释放吗?我加入了delete [] str1;出错。这内存是怎样释放的。
      

  2.   

    BSTR str只是定义 了一个指针,你没有申请内存。当然就不可以了。而str是你已经申请了的内存
      

  3.   

    strcpy中把(LPSTR)_bstr_t(str)转换成的unicode串copy到str1,
    而str1是申请的ascii串,它们的数据结构不一样(存储结构不一样),
    这样导致了str1的存储结构不正常。因此释放出错.
      

  4.   

    strcpy中把(LPSTR)_bstr_t(str)转换成的unicode串copy到str1,
    而str1是申请的ascii串,它们的数据结构不一样(存储结构不一样),
    这样导致了str1的存储结构不正常。因此释放出错.
      

  5.   

    (LPSTR)_bstr_t(str)  不是强制转换了吗!能给我讲讲_bstr_t好吗!特别是它的操作。