最近我在编译本机C ++ DLL项目的同时打开了由Visual Studio 9生成的.dll文件,并且惊讶地看到“这个程序无法在DOS模式下运行”文本开头附近。
为什么在.dll文件中包含此文本?
答案 0 :(得分:8)
dll非常类似于具有不同扩展名的可执行文件。您看到的文本是Windows上“标准”可执行文件头的一部分。它曾被用来优雅地中止从DOS运行Windows可执行文件的尝试。
答案 1 :(得分:3)
可移植可执行文件格式规范声明如下:
MS-DOS存根是一个在MS-DOS下运行的有效应用程序。它是 放在EXE图像的前面。链接器放置默认存根 这里打印出消息“这个程序不能在DOS下运行 模式。“当图像在MS-DOS中运行时。用户可以指定一个 使用/ STUB链接器选项使用不同的存根。
在位置0x3c处,存根具有到PE签名的文件偏移量。 此信息使Windows能够正确执行图像文件, 即使它有一个MS-DOS存根。此文件偏移位于 链接期间的位置0x3c。
答案 2 :(得分:1)
Win32程序从DOS模式运行(即单用户,无图形)打印该文本。如果你尝试在没有运行Windows的情况下使用它们,DLL也可能会打印该消息。