STDMETHODIMP CClirASO::getKeywordTranslationP(BSTR str1, BSTR str2, BSTR* result)
{
// TODO: 在此添加实现代码
string s = this->MygetKeywordTranslation(_com_util::ConvertBSTRToString(str1),_com_util::ConvertBSTRToString(str2));
* result =_com_util::ConvertStringToBSTR(s);
return S_OK;
}
错误信息:
错误 1 error C2664: '_com_util::ConvertStringToBSTR' : cannot convert parameter 1 from 'std::string' to 'const char *'
我这里的*result应该就是一个值,为什么会出现这样的情况呢?

解决方案 »

  1.   

    出错信息很清楚:
    不能把 'std::string' 转换为 'const char *'
    如果是UNICODE转char*
    可以直接用CW2A
      

  2.   

    这跟你result毫无关系,而是s不满足ConvertStringToBSTR的参数要求。函数要求const char*,而string不是const char*
    试试* result =_com_util::ConvertStringToBSTR((LPCTSTR)s); 
    或者
    * result =_com_util::ConvertStringToBSTR(s.c_str()); 
      

  3.   

    把VC 6.0的工程文件用VS2008打开,编译报错: error C2664: “_com_util::ConvertBSTRToString”: 不能将参数 1 从“String”转换为“BSTR”;出错的程序代码是这句:char *Filename=_com_util::ConvertBSTRToString(filename);这代码是以前在VC 6.0里写的。VC 6.0里的默认的内置字符集是ANSI.而上面的一段代码里的filename是一个定义的类型变量:String filename;String 的定义是:typedef unsigned short* String;BSTR 在VC6.0里是typedef unsigned short*,而在VS2008里却是wchar_t*,wchar_t是一个 16-bit UNICODE character;注意COM编程里面只支持wchar_t即unicode编码形式。虽然上面的unsined short与wchar_t都是16位的,但是不同编码之间是不兼容的。ANSI以8bit来表示一个字符,而unicode以16bit来表示一个字符。如果我们的内存单元是8位来单位的,比如一个字符串“abc",用ANSI来表示就占用四个存储单元,而用UNICODE来表示就占用8个存储单元。很显然这两种编码是兼容的。我们想像一下内存模型就知道。解决方法很简单:在VS2008里:项目->属性->配置属性->C/C++->语言;把wchar_t视为内置类型改为否即可。