首页
社区
课程
招聘
[求助][求助]unicode编程上遇到的问题
发表于: 2010-11-11 11:29 5848

[求助][求助]unicode编程上遇到的问题

2010-11-11 11:29
5848
最近在把以前写的程序改造成unicode版的,但并没有我想象的那么简单,下面我将我遇到的问题表述如下,希望高手能帮忙解决
问题一:
TCHAR szFind[MAX_PATH];
wcscpy(szFind,lpPath);//lpPath是个TCHAR*的变量
编译出错:
error C2664: 'wcscpy' : cannot convert parameter 1 from 'char [260]' to 'unsigned short *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
问题二:
我用惯了CString类,感觉用起来很方便,但是在支持MFC的程序中,比如支持MFC的控制台程序中(主要想用CString类),把程序改成支持unicode的时候,会缺好多文件,我从VC的安装包中,拷贝过来了,但是有个mfc42ud.dll这个文件,如果系统没有程序就无法运行,我加入到VC的工作目录中也不行,只有加到system32下或程序目录下才行。因为系统本身没有这个文件,所以程序在其他机子上就无法运行。
这是我目前遇到的两个问题,以后遇到新的问题我会继续提出,也望其他人有什么在unicode编程上的疑问也可提出供大家学习讨论,就当这是个unicode问题解决区吧。
谢谢

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
szfind 类型是Cstring的?
改成这样试试看
wcscpy(LPCTSTR(szFind),lpPath)
2010-11-11 11:45
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是CString的,是TCHAR的数组,我试过了,这样改也报错error C2664: 'wcscpy' : cannot convert parameter 1 from 'const char *' to 'unsigned short *'
在不用unicode的时候,strcpy的第一个参数就可以,没问题,但换成unicode的时候就出现问题了

不过,仍然谢谢你
2010-11-11 15:58
0
雪    币: 37
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
TCHAR我记得是根据系统来决定是ASII 还是UNICODE
你状态不确定 怎么能说自己的任务是转换成UNICODE?

WCHAR szFind[MAX_PATH];
wcscpy(szFind,lpPath);//lpPath是个TCHAR*的变量
我觉得就可以   lpPath是个WCHAR*的变量
2010-11-11 16:21
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=defddr;887834]TCHAR我记得是根据系统来决定是ASII 还是UNICODE
你状态不确定 怎么能说自己的任务是转换成UNICODE?

WCHAR szFind[MAX_PATH];
wcscpy(szFind,lpPath);//lpPath是个TCHAR*的变量
我觉得就可以   lpPath是...[/QUOTE]
这个,我在工程中设置了,设为unicode编译了,变量的定义我用的是asii和unicode的通用定义,在编译选项哪里我进行了unicode设置,这个我测试过了,确实有问题,不信你可以试试
2010-11-12 08:42
0
雪    币: 37
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
问题在于告警说的是  'char [260]' to 'unsigned short *'
CAHR啊
只要是CAHR就不会是UNICODE 这点可以达成共识吧

而'unsigned short * 也很叫人疑惑  我觉得应该确认下变量声明。

另外不知道 核心编程里关于UNICODE编程 不知道有没帮助
因为我只接触了一点点驱动编程 基本只用WCHAR 和UNICODE 所以不是很清楚
2010-11-12 09:11
0
雪    币: 357
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
问题一:
在你的这个工程里,TCHAR 毫无疑问被认为是char。所以要么是的的宏定义有问题,要么是被其他头文件干扰

问题二:
编译成Release就可以了。这样在Win2000以后的系统都可以了。
2010-11-12 09:32
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢,我再试试
2010-11-12 11:12
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我也不知道了,我以前改过一个简单的(从VC6转移到VS2008中出现的问题,也是unicode问题),这样改的
#include "iostream"
#include <stdafx.h>
#include <afx.h>
using namespace std;
         
int _tmain(int argc, _TCHAR* argv[])
{
        CString   str=_T("0x11"); //VC6下为str=("0x11");

        TCHAR *revstr=new TCHAR[16];   //VC6下为   char *revstr=new char[16];  

        wcscpy(revstr,LPCTSTR(str));    //VC6下为   strcpy(revstr,str);     
         return 0;        
}

希望对你有用。。。
2010-11-12 11:26
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=defddr;888096]问题在于告警说的是  'char [260]' to 'unsigned short *'
CAHR啊
只要是CAHR就不会是UNICODE 这点可以达成共识吧

而'unsigned short * 也很叫人疑惑  我觉得应该确认下变量声明。

另外不知道 核心编程里关于UNICODE...[/QUOTE]
谢谢,问题已解决,是我的TCHAR.h文件有问题,我也想入手驱动方面的编程,上大学那会没怎么好好学,就了解了一下,现在感觉很有用,想再捡起来,以后希望能多多帮助
2010-11-12 11:29
0
游客
登录 | 注册 方可回帖
返回
//