LPWSTR AnsiToUnicode(LPCSTR lpcstr) //参数lpcstr类型也可是char*
{
LPWSTR Pwstr;
int Cb,i;
Cb=strlen(lpcstr)*sizeof(LPCSTR);
Pwstr=LocalAlloc(LMEM_FIXED,Cb);
i=MultiByteToWideChar(CP_ACP,0,lpcstr,-1,Pwstr,0);
MultiByteToWideChar(CP_ACP,0,lpcstr,-1,Pwstr,i); return (Pwstr);
}
函数功能:将ANSI转换成UNICODE:问题如下:1:首先此函数运行正常,但有一个缺点(个人观点),那就是在用 Cb=strlen(lpcstr)*sizeof(LPCSTR);函数分配固定内存时,多分配了内存,造成内存浪费。个人认为:应这样写Cb=2*(strlen(lpcstr)+1);
不知有错没有,请各位指教。
2:如果Cb=strlen(lpcstr);这样程序照样运行正常,但实际上分配的固定内存并不够,不够的部分占用了堆中其它未用的内存快。这部分内存快很容易被其他人分配用掉,所以Pwstr值很有可能会被冲掉(冲掉的是未够分配的内存)。
不知以上分析的对不对,请各位指教
{
LPWSTR Pwstr;
int Cb,i;
Cb=strlen(lpcstr)*sizeof(LPCSTR);
Pwstr=LocalAlloc(LMEM_FIXED,Cb);
i=MultiByteToWideChar(CP_ACP,0,lpcstr,-1,Pwstr,0);
MultiByteToWideChar(CP_ACP,0,lpcstr,-1,Pwstr,i); return (Pwstr);
}
函数功能:将ANSI转换成UNICODE:问题如下:1:首先此函数运行正常,但有一个缺点(个人观点),那就是在用 Cb=strlen(lpcstr)*sizeof(LPCSTR);函数分配固定内存时,多分配了内存,造成内存浪费。个人认为:应这样写Cb=2*(strlen(lpcstr)+1);
不知有错没有,请各位指教。
2:如果Cb=strlen(lpcstr);这样程序照样运行正常,但实际上分配的固定内存并不够,不够的部分占用了堆中其它未用的内存快。这部分内存快很容易被其他人分配用掉,所以Pwstr值很有可能会被冲掉(冲掉的是未够分配的内存)。
不知以上分析的对不对,请各位指教
解决方案 »
- 在一个线程中弹出模态窗口,如何在另一个线程中发消息关闭这个模态窗口?
- vs2005中如何编程处理中文数据的传输?
- 子窗体(WS_CHILD)显示不正常问题
- MessageBox,它是怎样根据文字量来自动调整大小的?点击其它地方时,它的标题栏总是一闪一闪的,所以我想自己做一个来模拟,把闪去掉。
- dazedase(什么也不懂,什么也不会,所以我很菜)进来,谢谢
- 请教:有关ComboBox
- 高分求助!用vc++编与SQL2000数据库的连接池?
- 安装MS SDK过程中遇到问题,不能安装---谁知道这是怎么回事?
- 500分问:我用lame_enc.dll做的实时录制程序,有的声卡录的可以有的声卡录出来的声音好象很快,不知如何解决?具体采样参数请近来看看,来
- 为什么有的服务器上串口使用一段时间会异常,重启程序也打不开
- 动态修改加速键
- 求教:三维实体的断层扫描后任意方向截面的平面图形重建问题
对这个问题有纤细的描述可以看看!
{
LPWSTR Pwstr;
int i;
i=MultiByteToWideChar(CP_ACP,0,lpcstr,-1,NULL,0);
Pwstr=new WCHAR[i];
MultiByteToWideChar(CP_ACP,0,lpcstr,-1,Pwstr,i);
return (Pwstr);
}顺便说一下,你这种在程序内部new、外部释放的做法如果不明显说明的话非常容易引起内存泄漏!
不知有错没有,请各位指教。这样应该是错误的,在第一个
i=MultiByteToWideChar(CP_ACP,0,lpcstr,-1,Pwstr,0);
Return Values
If the function succeeds, and cchWideChar is nonzero, the return value is the number of wide characters written to the buffer pointed to by lpWideCharStr. If the function succeeds, and cchWideChar is zero, the return value is the required size, in wide characters, for a buffer that can receive the translated string.
已经取得了宽字节的大小。
那应该怎样写啊?请指教?Cb=strlen(lpcstr)*sizeof(LPCSTR);这样写是不是浪费了内存?请指教?