BSTR应该是没有问题的,因为VB中的字符串就是BSTR类型的,是不是你没有正确使用BSTR的内存分配函数吧!

解决方案 »

  1.   

    BSTR是不定长的长串,获得BSTR字串值后应用CComBSTR
      

  2.   

    不会吧,还要用COM!我只是想从VB中传递一个不定长字符串到一个ATL接口中,而在接口实现中,此字符串应转换为LPCTSTR,被MFC使用。
    整个过程怎样实现最简便?
    BSTR的内存分配函数是什么?MSDN中查不到。
      

  3.   

    CComBSTR& operator =( LPCSTR pSrc );可以直接把CComBSTR赋给LPCTSTR
    比如:
    BSTR para;
    CComBSTR combstr(para);
    LPCTSTR=(LPCTSTR)combstr;
      

  4.   

    我的源代码结构如下:
    VC:
    HRESULT Open([in] BSTR FileName, [out] long Result)
    {...
    CFile f;
    f.Open((LPCTSTR) FileName, ...)
    ...}VB:
    dim test as new vcATLobject
    vcATLobject.Open "test.tre"我不想使用CComBSTR,有没有类似我这样的解决方法(只要简单的转换即可)?
      

  5.   

    HRESULT Open([in] BSTR FileName, [out] long Result)
    {...CComBSTR combstr(FileName);
    CString strFileName = combstr;CFile f;
    f.Open((LPCTSTR) strFileName, ...)
    ...}
      

  6.   

    你也用了CComBSTR,没有不用的办法吗?不必为一个字符串而初始化一个COM吧?
      

  7.   

    HRESULT Open([in] BSTR FileName, [out] long Result)
    {..._bstr_t combstr(FileName);CFile f;
    f.Open((char *)combstr, ...)
    ...}
      

  8.   

    跟踪了3个小时,终于弄明白了。
    earthdog的说法不确切。
    hover也不太对,没必要用CComBSTR,只是一个小小的参数,用多了会降低效率。
    opentuxedo的代码是错的。
    loyee的两段代码没问题,但用_bstr_t需要添加对comdef.h的引用,增大体积,降低效率。而使用CComBSTR与CString共同传递参数是没必要的。据我的跟踪,loyee的代码,就是转了一个圈:
    初始化CComBSTR实例时,BSTR作为LPCOLESTR传入其内部变量m_str(BSTR 类型);
    初始化CString实例时,调用了CComBSTR的一个运算符:BSTR,其作用就是直接返回m_str!
    也就是说:这里,直接用CString接受参数然后返回LPCTSTR即可。