2010-07-31 96 views
0

我有两台机器:我的开发机器上装有Windows Server 2008 R2以及Visual Studio 2008.我正在编译我的应用程序。我的另一台机器是目标机器,它运行Windows XP。MessageBox在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的机器一切是很好,除了弹出框而不是弹出框,我只听到“八丁”弹出声音。

我需要改变MSVC++肠的小设置才能使它在XP上工作吗?

我使用的字符集是“未设置”。我不确定这是否会做任何事情,但我试着将它改为没有骰子的多字节。

+0

此代码适用于XP,Vista和7(尽管我使用的是Visual Studio 2010 - 但这不应该真的有所作为)。无论如何,我有一种感觉,你可能需要调整一些编译器和/或链接器设置。您是否尝试过仅使用您发布的代码开始一个新的Visual Studio项目,并保留所有默认的编译器和链接器选项? – user353297 2010-07-31 20:36:23

回答

2

我看到了一个错误的哔声,当有一个配置错误的清单资源/外部appname.exe。明显如此,如果你使用一个,请尝试禁用它。

0

这是基本的,它可以得到,应该在任何Windows系统上工作。你可以检查MessageBox的返回值,如果它是0,调用GetLastError()

1

我也有这个问题,并经过一些搜索后,我在网上找到了这个解决方案:在显示MessageBox之前调用InitCommonControls()。这解决了我的问题。

就像Alex K.注意到的,这是由一个清单造成的。如果通过在清单中指定版本6来加载ComCtl32.dll的版本6,则需要先调用Windows XP上的InitCommonControls(),然后才能使用这些控件,否则它们将不会被加载,这就是为什么您无法看到MessageBox(虽然你可以听到它)。