本帖最后由 hbvanguard 于 2012-06-13 12:50:00 编辑

解决方案 »

  1.   

    不能单步调式吗? 怀疑是Name = rs.GetStr()引起的, 搜索一下c# BSTR
      

  2.   

    可能c#是UNICODE,c++是ansi的,
    你先拷贝到缓冲区,把char转换成WCHAR之后试试?
      

  3.   

    BSTR是宽字节类型的。
    就是不知道C#的字符串和C++的字符串是不是这样传递的http://www.programfan.com/club/showpost.asp?id=12049
    这里有一个例子
      

  4.   

    BSTR 使用
    BSTR bstrText = ::SysAllocString(L"Test"); 
    char* lpszText2 = _com_util::ConvertBSTRToString(bstrText); 
    SysFreeString(bstrText); // 用完释放 参考 http://www.cppblog.com/lizao2/articles/169250.html
      

  5.   

    string Name = String.Format("{0}", rs.GetStr());你试试这样可行否。
      

  6.   

    不了解com 但是GetStr()里的变量看上去都是局部变量 rs.GetStr()返回的对象已经无效了吧
      

  7.   

    官方例子
    STDMETHODIMP CAlertMsg::get_ConnectionStr(BSTR *pVal){ //  m_bsConStr is _bstr_t
       *pVal = m_bsConStr.copy();
    }
    BSTR GetStr()
    {
       char str[100];
       .......//str赋值
       _bstr_t b_s;
       BSTR bstr=NULL;
       b_s=str;
       bstr=b_s.Detach();
       return bstr;
    }