[attach]65383[/attach]
你看这一行,是调用一个内核函数,把多字节编码字符串(ANSI)转换为wchar_t宽字节编码了,但你看我的源程序,没有这个调用!我那个程序是完全彻底的ANSI版本代码,你可以比较我以前发过的宽字符版本的代码,就可以发现,连字符串的格式(前面带L)和函数的名称都不一样的!
这就证明了书上告诉我们的一个道理是真的:当代的Windows系统内部全部使用Unicode16编码字符串,即使你程序中全部使用传统的ANSI字符串编码(现在大多数人所学的C/C++编程知识都是在使用ANSI编码,那些函数的版本也是ANSI编码版本),在编译器编译过程中和操作系统DLL内核,一定会自动把你这些编码强制转换为Unicode16编码,而你还傻乎乎地自以为节省了多少内存和时间,却想不到这中间居然有大量的多余动作在消耗你那精心设计的算法效率。比如,你在写MessageBox()函数调用的代码,但其实编译器会根据编译环境的设定偷偷把最终代码编译为MessageBoxA()或MessageBoxW()两者之一,前者对应ANSI版本,后者对应Unicode版本,但即使是编译为MessageBoxA(),到了Windows下运行,DLL运行库也会临时把这个函数切换给MessageBoxW()执行,然后把返回的结果再转换为ANSI字符串给你,让你以为完全没有转换过程。现在,你明白你在汇编版问过的那个问题到底是怎么回事了么?
[
本帖最后由 TonyDeng 于 2012-10-10 02:08 编辑 ]