其实我们在C和VC的时候使用的是MessageBox,而不是MessageBoxA,但是程序真正调用的确实是MessagBoxA。A究竟是什么意思呢?这其实涉及到win9X系列的核心和NT核心的区别,win98等并不是真正的32位系统,执行API函数都是ANSI类型的。
而到了NT核心的windowsNT 和 windows2000以上的系统都是纯32位模式的,系统的核心基于Unicode,这样其实会导致一个与win9x程序的兼容问题,原来16位的API函数现在在纯32位的NT系统上不兼容。
微软的解决办法是:使用两种类型的函数,ANSI就在函数后面标识为MessageBoxA,Unicode版本的则在后面加上w:MessageBoxW。在具体的执行上,Nt系统在遇到A系列的函数时会先将A类型的函数转换为Unicode型的函数再执行,如NT系统遇到MessageBoxA,会先将MessageBoxA转换为MessageBoxW,然后再执行。
而到9x系列遇到Unicode函数时则执行相反的过程,先将w系列函数转换为A系列的函数,然后再执行。但是,不是每个Unicode函数都能进行转换,所以有些基于NT的程序不能在9x系列系统上执行。

posted on 2011-07-22 19:53  role  阅读(5804)  评论(0编辑  收藏  举报