用ATL封组件,传入BSTR,到函数中一看是乱码,用char * p = W2A(bszPathName)还是乱码,_com_util::ConvertBSTRToString(bszPathName)也不行
修改VS2005工程属性中的字符集为unicode,或者是多字符集都不行
我是windows Server 2003 Enterprise Edition SP2的系统,Inter(R) Core(TM)2 CPU 6300 @ 1.86GHz

解决方案 »

  1.   

    在调用ATL接口时要注意, 否则也会出现乱码的情况COM传递字符串参数必须要使用系统专用的分配内存函数 SysAllocString ... (因为跨进程调用)建议使用 _bstr_t,  _bstr_t 可以直接进行W,A互换
      

  2.   

    测试一下,看看下面的转换是否有问题:
    BSTR bstrMyBeaster = SysAllocString (L"Tring, Tring!");
    WCHAR* pwszMyWCharString = L"Tring, Tring!";
     
    USES_CONVERSION;
    LPSTR pszCharStringFromBSTR = OLE2A (bstrMyBeaster);
    LPSTR pszCharStringFromLPWSTR = W2A (pwszMyWCharString);
    // ...
    SysFreeString (bstrMyBeaster);