诸位大侠,帮我看一下,为什么一个char*先转成BSTR,再转成char*后,居然会不相等???求求那位大侠行行好,解决后立刻给分! char* G_sEncrypt="?>?W眂";  
BSTR  pVal = _com_util::ConvertStringToBSTR(G_sEncrypt);  
char sTemp[256]={0};
strcpy(sTemp,_T((char *)_bstr_t(pVal)));
if (strcmp(sTemp,G_sEncrypt)==0)
AfxMessageBox("等于");
else
AfxMessageBox("不等于");

解决方案 »

  1.   

    在VC.NET中执行的结果是等于
    VC6.0可能有不同
    试试
    char* G_sEncrypt="?>?W眂";  
    BSTR  pVal = _com_util::ConvertStringToBSTR(G_sEncrypt);  
    char sTemp[256]={0};
    strcpy(sTemp,(LPCSTR)_bstr_t(pVal));
    if (strcmp(sTemp,G_sEncrypt)==0)
    printf("等于\n");
    else
    printf("不等于\n");
      

  2.   

    字符类型不同吧!
    可能是BSTR对标准char字符加了些东西。
      

  3.   

    To masterz(MS MVP)大侠和其他大侠:是不是我的转换写法问题,能不能有一种方法可以使char*转成BSTR后再转回来可以一样,因为我的目的是从COM中传出的BSTR加密字符串转成char*再解密,如果对不上原来用char*加密的字符串,肯定解密出错,而原来用char*加密的字符串就是char* G_sEncrypt="?>?W眂";经过COM走了一圈后居然不一样,我实在是很痛苦,因为COM的参数只能是BSTR类型,不能是char*,各位大侠行行好,我再解决不了就要下岗了,现在全国闹SAS,工作实在不好找,我先干为尽了......(灭害灵我吞了半瓶,剩下的要看各位大侠的了,早期还有救,晚了就55555555......)
      

  4.   

    将这句
    char* G_sEncrypt="?>?W眂";
    改为
    char* G_sEncrypt=_T("?>?W眂");
    试试
      

  5.   

    #include <atlconv.h>USES_CONVERSION;
    char* G_sEncrypt="?>?W眂";  
    BSTR  pVal = SysAllocString(T2OLE(G_sEncrypt));
    char sTemp[256]={0};
    strcpy(sTemp,OLE2T(pVal));
    if (strcmp(sTemp,G_sEncrypt)==0)
    printf("等于\n");
    else
    printf("不等于\n");
      

  6.   

    zhaolaoxin()和 CloudWater(秋云开水)两位大侠的方法小弟试过了,果然可以,但是我的程序还是有问题,那位大侠能够给个email,容小弟发个源程序,让大侠们调试一下,大侠古道热肠,小弟再次谢过!