是否有与obj 同效果 的unicode 替代函数

CSW8923 2009-02-22 11:52:20
obj->m_list.SetItemText(0,3,str1);
dDlg.cpp(187) : error C2664: “CListCtrl::SetItemText”: 不能将参数 3 从“char [260]”转换为“LPCTSTR”

obj->m_list.SetItemText(0,3,str1);
.\dDlg.cpp(201) : error C2664: “CListCtrl::SetItemText”: 不能将参数 3 从“char [260]”转换为“LPCTSTR”

obj->m_list.SetItemText(0,3,strcat(str1,str2));
1>.\dDlg.cpp(216) : error C2664: “CListCtrl::SetItemText”: 不能将参数 3 从“char *”转换为“LPCTSTR”

obj->m_list.SetItemText(0,3,strcat(str1,str2));
1>.\dDlg.cpp(231) : error C2664: “CListCtrl::SetItemText”: 不能将参数 3 从“char *”转换为“LPCTSTR”

obj->m_list.SetItemText(0,3,str1);
1>.\dDlg.cpp(245) : error C2664: “CListCtrl::SetItemText”: 不能将参数 3 从“char [260]”转换为“LPCTSTR”

SHGetPathFromIDList(pItemList,m_pDirPath);
1>.\BrowseFolder.cpp(36) : error C2664: “SHGetPathFromIDListW”: 不能将参数 2 从“char *”转换为“LPWSTR”

DWORD dFileAttrib=GetFileAttributes(pDirPath);
1>.\BrowseFolder.cpp(53) : error C2664: “GetFileAttributesW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”

请高手帮忙解析下上面的错误
...全文
203 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
一条晚起的虫 2009-02-22
  • 打赏
  • 举报
回复
.obj是编译是产生的中间文件。
一条晚起的虫 2009-02-22
  • 打赏
  • 举报
回复
你的工程是Unidecode版本的,那些函数参数要求wchat_t,而不是char
用TCHAR, _T("")等等宏,可以在Unicode和Ansi工程中通用。
arong1234 2009-02-22
  • 打赏
  • 举报
回复
基本上都是你的str1,str2,...之类的类型没有随之变为unicode版本的,而不是那些obj有问题
在字符串使用商,要记得永远使用带T的版本,而不要使用char*或者wchar_t*,应该使用TCHAR
cnzdgs 2009-02-22
  • 打赏
  • 举报
回复
你的项目使用的是Unicode字符集,把char型数组改成TCHAR型数组,把char*改成TCHAR*。
a_rockboy 2009-02-22
  • 打赏
  • 举报
回复
定义字符或字符串的时候别使用char,或者char *, char[]
而是使用TCHAR, TCHAR[], THCAR *
oyljerry 2009-02-22
  • 打赏
  • 举报
回复
对于Unicode来=中,WideCharToMultiByte()是用函数API的方式来把Unicode字符串转为ansi,而W2T等也是可以实现这个转换功能,只不过用的类方式...
两者都可以实现这个转换目的。
CSW8923 2009-02-22
  • 打赏
  • 举报
回复
自己顶一下
CSW8923 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 arong1234 的回复:]
你还是没有明白TCHAR, WCHAR, Wide Char和miltiple char之间的关系
对于WideCharToMiltiByte,他需要接收一个wchar作为输入字符串,

至于你这个情况,在unicode情况下应该很多情况下都不需要WideCharToMultiByte,这个函数强制从wchar到MCBS,而实际上你可能需要的是W2T之类的宏,而不是这个函数

好好体会实质,不要只关注人家给你的代码和解决方案,如果你不理解人家的答案,你永远解决不了实质问题

引用 6 楼 CS…
[/Quote]

上面这些 类型问题我已经 自行修改好了。 也学会了许多
不过目前还存在一个问题就是 你说的WideCharToMultiByte函数在unicode 不需要而需要的是 W2T之类的宏 这是什么意思?
能否解释下?
arong1234 2009-02-22
  • 打赏
  • 举报
回复
你还是没有明白TCHAR, WCHAR, Wide Char和miltiple char之间的关系
对于WideCharToMiltiByte,他需要接收一个wchar作为输入字符串,

至于你这个情况,在unicode情况下应该很多情况下都不需要WideCharToMultiByte,这个函数强制从wchar到MCBS,而实际上你可能需要的是W2T之类的宏,而不是这个函数

好好体会实质,不要只关注人家给你的代码和解决方案,如果你不理解人家的答案,你永远解决不了实质问题

[Quote=引用 6 楼 CSW8923 的回复:]

char tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH];

替换成

TCHAR tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH];
========================================================

WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );

strcpy( str2, tmp );


dDlg.cpp(167) : error C2664: “WideCharToMultiByte”: 不能将参数 5 从“TCHAR [260]”转…
[/Quote]
CSW8923 2009-02-22
  • 打赏
  • 举报
回复

char tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH];

替换成

TCHAR tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH];
========================================================

WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );

strcpy( str2, tmp );




dDlg.cpp(167) : error C2664: “WideCharToMultiByte”: 不能将参数 5 从“TCHAR [260]”转换为“LPSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\dDlg.cpp(168) : error C2664: “strcpy”: 不能将参数 1 从“TCHAR [260]”转换为“char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\dDlg.cpp(174) : error C2664: “WideCharToMultiByte”: 不能将参数 5 从“TCHAR [260]”转换为“LPSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\dDlg.cpp(175) : error C2664: “strcpy”: 不能将参数 1 从“TCHAR [260]”转换为“char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\dDlg.cpp(215) : error C2664: “strcat”: 不能将参数 1 从“TCHAR [260]”转换为“char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\dDlg.cpp(216) : error C2664: “strcat”: 不能将参数 1 从“TCHAR [260]”转换为“char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\dDlg.cpp(230) : error C2664: “strcat”: 不能将参数 1 从“TCHAR [260]”转换为“char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\dDlg.cpp(231) : error C2664: “strcat”: 不能将参数 1 从“TCHAR [260]”转换为“char *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\BrowseFolder.cpp(36) : error C2664: “SHGetPathFromIDListW”: 不能将参数 2 从“char *”转换为“LPWSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>.\BrowseFolder.cpp(53) : error C2664: “GetFileAttributesW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧