用MASM32写了一个小程序F,程序在运行时会调用MessageBox()弹出一系列对话框。这个程序在Windows 7,10下运行正常,但在Win XP下运行时只能听到对话框弹出的声音,对话框却没显示,这种只闻其声不见其形的故障以前也从未遇到过,程序运行时无声无形的情况倒是遇到过几次,但都是出现在使用自定义窗口的程序上,其原因是资源文件中的自定义窗口信息ID与程序中调用ID值不一致,从而导致窗口没能创建出来。
小程序虽然没有使用自定义窗口,但仍然使用了资源文件rsrc.rc,定义了文件版本信息等内容,难道又是资源文件作怪?
把资源文件rsrc.res删除,重新编译连接再运行,对话框应声而出。果然又是资源文件作怪。
检查资源文件rsrc.rc,找到了问题的根源:
1 VERSIONINFOFILEVERSION 0, 0, 0, 1PRODUCTVERSION 0, 0, 0, 1FILEFLAGSMASK VS_FFI_FILEFLAGSMASKFILEOS VOS__WINDOWS32FILETYPE 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改成另外一个值就行了。
新闻热点
疑难解答