2010-07-31 7 views
0

J'ai deux machines: mon ordinateur de développement a Windows Server 2008 R2, avec Visual Studio 2008. Je compile mon applciation là-bas. Mon autre machine est la machine cible et elle fonctionne sous Windows XP.MessageBox ne pas afficher sur Windows XP

Le problème est que j'ai un appel MessageBox qui fonctionne sur la machine de développement mais pas sur la machine cible.

je l'ai fait remarquer à tout WinMain de sorte qu'il est maintenant seulement ceci:

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; 
} 

Sur la machine dev la boîte de message apparaît bien (sans le son), le tout de la machine XP reste est bien, sauf qu'au lieu de la boîte popup, j'entends juste le son "ba-ding".

Quel petit réglage dans les entrailles de MSVC++ dois-je changer pour que cela fonctionne sur XP?

Le jeu de caractères que j'utilise est "Non défini". Je ne suis pas sûr si cela fait quelque chose, mais j'ai essayé de le changer en multi-octets sans dés.

+0

Ce code fonctionne pour moi dans XP, Vista et 7. (Bien que j'utilise Visual Studio 2010 - mais cela ne devrait pas vraiment faire la différence). Quoi qu'il en soit, j'ai le sentiment que vous devrez peut-être ajuster certains de vos paramètres de compilation et/ou d'éditeur de liens. Avez-vous essayé de démarrer un nouveau projet de studio visuel en utilisant seulement le code que vous avez posté et en laissant toutes les options par défaut du compilateur et de l'éditeur de liens? – user353297

Répondre

2

J'ai vu le bip-au lieu d'une fenêtre lorsqu'il y a une ressource manifeste mal configurée/appname.exe externe. manifeste donc si vous en utilisez un, essayez de le désactiver.

0

C'est à peu près aussi simple que possible et devrait fonctionner sur n'importe quel système Windows. Vous pouvez vérifier la valeur de retour de MessageBox, si elle est 0, appelez GetLastError()

1

J'ai également eu ce problème, et après quelques recherches j'ai trouvé cette solution sur le Web: appelez InitCommonControls() avant d'afficher le MessageBox. Cela a résolu le problème pour moi.

Comme Alex K. a remarqué, ceci est causé par un manifeste. Si vous chargez la version 6 de ComCtl32.dll en spécifiant que dans le manifeste, vous devez appeler InitCommonControls() sous Windows XP avant de pouvoir utiliser les contrôles, sinon ils ne seront pas chargés, et c'est pourquoi vous ne pouvez pas voir le MessageBox (bien que vous puissiez l'entendre).