用MASM32写了一个小程序F,程序在运行时会调用MessageBox()弹出一系列对话框。这个程序在Windows 7,10下运行正常,但在Win XP下运行时只能听到对话框弹出的声音,对话框却没显示,这种只闻其声不见其形的故障以前也从未遇到过,程序运行时无声无形的情况倒是遇到过几次,但都是出现在使用自定义窗口的程序上,其原因是资源文件中的自定义窗口信息ID与程序中调用ID值不一致,从而导致窗口没能创建出来。
小程序虽然没有使用自定义窗口,但仍然使用了资源文件rsrc.rc,定义了文件版本信息等内容,难道又是资源文件作怪?
把资源文件rsrc.res删除,重新编译连接再运行,对话框应声而出。果然又是资源文件作怪。
检查资源文件rsrc.rc,找到了问题的根源:
1 VERSIONINFO
FILEVERSION 0, 0, 0, 1
PRODUCTVERSION 0, 0, 0, 1
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
{
BLOCK "StringFileInfo"
{
BLOCK "080404b0"
{
VALUE "CompanyName", "PurpleEndurer | 紫郢剑侠㊣ \000"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 2052, 1200
}
}
1 24 DISCARDABLE "XPStyle.xml"
VERSIONINFO和XPStyle.xml的ID重复了,而在Windows XP中,XPStyle.xml规定了程序界面显示,所以引发了这个奇怪的故障。
把XPStyle.xml的ID改成另外一个值就行了。