我有两台机器:我的开发机器上有Windows Server 2008 R2,还有Visual Studio 2008.我正在那里编译我的应用程序。我的另一台机器是目标机器,它运行Windows XP。
问题是我有一个MessageBox
调用可以在开发机器上运行,但不能在目标机器上运行。
我在WinMain
中注释了所有内容,现在只有这个:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, "Your application is already running!", "Application Notification", MB_OK|MB_ICONINFORMATION);
return 0;
}
在开发机器上,消息框弹出正常(没有声音),在XP机器上其他一切都很好,除了弹出框而不是我听到“ba-ding”弹出声音。
我需要更改MSVC ++内容中的哪个小设置才能使其在XP上运行?
我使用的字符集是“未设置”。我不确定这是否有效,但我尝试将其更改为多字节,没有骰子。
答案 0 :(得分:2)
当有错误配置的清单资源/外部appname.exe.manifest时,我看到了哔哔声而不是窗口的东西,所以如果您使用的话,请尝试禁用它。
答案 1 :(得分:1)
我也有这个问题,经过一些搜索后我在网上找到了这个解决方案:在显示MessageBox之前调用InitCommonControls()。这解决了我的问题。
像Alex K.注意到,这是由清单造成的。如果你通过在清单中指定它来加载ComCtl32.dll的第6版,你需要在使用控件之前在Windows XP上调用InitCommonControls(),否则它们将不会被加载,这就是你看不到的原因MessageBox(虽然你可以听到)。
答案 2 :(得分:0)
这是基本的,它可以在任何Windows系统上运行。您可以检查MessageBox的返回值,如果为0,则调用GetLastError()