VS2019 MFC踩坑记录
VC6的年代已经过去很久了,学校毕业出道就开始撸MFC...从MFC还算是由一些情感记忆的,毕竟是以前吃饭的家伙。
N年后,重新拾起VC。好家伙,一看版本居然都VS2019了(还有更高的版本,只是我不想当小白鼠)。果断社区版装上,嗯嗯,还是熟悉的问道,代码智能提示依旧还是那么的垃圾,这很微软。
当初的MFC只是单纯的多字节编码,管丫的什么,统统GBK。
如今的MFC默认给你开启UNICODE,默认给你开启优化。这里就产生了两个大坑:
1、坑一,默认Unicode
第一次编译出来跑一跑,第一眼看上去:“哎呀握艹,MFC居然变漂亮了,不是以前那样子了”。换了层皮之后,就掉进Unicode的大坑了
CString msg;
msg.format ...我靠,为毛线有错误?以前都是这样 format 的啊,靠着VisualStudio“弓虽大白勺智能提示”,原来改名成Format了.....wo艹,怎么还有错误,再次靠着弓虽大的提示功能,原来是要 _T() ...老人不会玩新版本的MFC了。
因为功能需要,创建了一个Pipe,从控制台捕获输出
我尼玛,从这里开始爬坑。解释一下为什么有坑:
a).中文环境,win7以前,默认GBK。从win10开始,这货居然Unicode了
b).还是gbk问题,MFC认为控制台输出的时gbk,所以在win11下,并启用了Unicode的情况下,他会自作聪明的把控制台pipe输出的内容悄咪咪的来了个转码,gbk->utf8
所以,最开始的时候,我把从pipe抓到的内容,来个utf8 -> gbk 之后变成了火星文。不转也是火星文。What the f**k?百思不得其解。最后是在一次偶然中,pipe返回值只有一个汉字+一个字母,长度居然为6 ......突然醒悟。
把编码手工还原一下 utf8 -> gbk ,我滴个乖乖,这样才对。
2、坑二,代码优化
我特么的各种断点调试呢,变量窗口各种给我“变量已优化”...好烦。关掉关掉,不然没法调试。
记录一下。新版本,新玩法,老人out了。