函数在.net2003中编辑运行没有问题,但是VC++6.0中运行出问题:
error C2664: 'lstrcpyA' : cannot convert parameter 1 from 'unsigned short *' to 'char *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast还有就是在字符串前面加L或_T做用是?怎么用?(下面是我出问题的函数)
//-----------------------------------------------------------------------------
// Desc: 从绝对路径中提取件名
//-----------------------------------------------------------------------------
void RemovePathFromFileName(LPSTR fullPath, LPWSTR fileName)
{
//先将fullPath的类型变换为LPWSTR
WCHAR wszBuf[MAX_PATH];
MultiByteToWideChar( CP_ACP, 0, fullPath, -1, wszBuf, MAX_PATH );
wszBuf[MAX_PATH-1] = L'\0'; WCHAR* wszFullPath = wszBuf; //从绝对路径中提取文件名
LPWSTR pch=wcsrchr(wszFullPath,'\\');
if (pch)
lstrcpy(fileName, ++pch);
else
lstrcpy(fileName, wszFullPath);
}

解决方案 »

  1.   

    强制转换下
    (char *)variables;
    其实有一个函数可以实现你的功能
    但我忘了
      

  2.   

    L表示宽字符_T表示系统自动根据程式设置识别是使用多字节字符还是宽字符处理.lstrcpyW替代lstrcpy即可.
      

  3.   

    1.unsigned short * -> char* 用com_util::ConvertBSTRToString应该可以吧。2.当定义了宏UNICODE时,_TEXT("a")就变成了L"a";否则,就是"a".   
    T和_TEXT一样。   
    写字符串常量时加上这个宏可以使你在把程序改为Unicode程序时比较容易。
      

  4.   

    unsigned short *就是WCHAR*所以,用lstrcpyW替代lstrcpy即可.
      

  5.   

    .net以上的版本.会根据环境自动将lstrcpy转为lstrcpyA或是lstrcpyW.所以你在.net 2003上运行不会报错. 6.0不会这么做.
      

  6.   

    谢谢大家!多字节字符还是宽字符,有什么区别?
    和char有什么不同?
    用lstrcpyW替代了lstrcpy,但又出现了个问题.LPWSTR pch=wcsrchr(wszFullPath,'\\');
    这个函数,
    cannot convert parameter 2 from 'const char' to 'const unsigned short *'
      

  7.   

    未定义UNICODE,却声明 filename 为 LPWSTR 不觉得矛盾么?要么都用 char*, 要么都用 WCHAR,要么使用TCHAR 系列代码写着都省心... 可是参和在一起... 简直糟透了.P.S.LPWSTR pch=wcsrchr(wszFullPath,L'\\'); 
    这个函数, 
    cannot convert parameter 2 from 'const char' to 'const unsigned short *'
      

  8.   

    wcsrchr(wszFullPath,L'\\'); 
    或是
    wcsrchr(wszFullPath,_T('\\')); 
      

  9.   

    我也遇到同样的问题  怎样定义Unicode宏