使用WDK开发普通XP应用程序注意点

这几天尝试拿WDK的库和编译器编译普通程序。目的是为了能链接到MSVCRT.DLL上去,减小自身程序体积。

很长时间了也没有人报有什么问题,自己是Win7的系统,其实也没有测试过XP下能不能使用。

但是很坑爹的是,事实证明不行……今天贴吧上有人报了XP下无法启动,报msvcrt.dll中找不到_except_handler4_common入口。

我检查了一下我编译出来的程序的导入表,果不其然有_except_handler4_common……

网上搜了一下,出来的基本都是说你把dwmapi.dll改名吧。但是我现在是导入表中直接有这一项,明显不是这个的问题。

之前就看网上有人说,Vista开始以后msvcrt.dll变得和原来不太一样。不过当时还没有太注意,没想到现在我给碰上了。

但是我编译的时候用的是wdk的xp free那个环境啊,为什么会出这种事。觉得略奇怪。

然后到7600.16385.1\lib\wxp\i386文件夹下找了找,

vcrtxp
逗我玩儿?

然后我把这个obj文件加到link的时候的那一堆obj中,编译出来的exe、dll的导入表中就没有_except_handler4_common了。

后续:

没有这个也没用。还是不能运行,提示_fseeki64入口找不到。找了找,这个函数出现在libvorbis里面。它里面居然有这样的代码

#ifdef __MINGW32__
  return fseeko64(f,off,whence);
#elif defined (_WIN32)
  return _fseeki64(f,off,whence);
#else
  return fseek(f,off,whence);
#endif

把中间#elif defined (_WIN32)那一行和它下面的那一行删掉或者注释掉,再编译,_fseeki64的依赖就没有了。

最终我虚拟机里装了个XP作为测试环境,试了一下终于可以了。

发表评论