2009-09-05 8 views
1

Je suis buisy sur un moteur de jeu DirectX10 et j'ai un problème qui n'a rien à voir avec DirectX: P Le problème est que dans la DLL qui contient le moteur, parfois un DialogBox est appelé , tout comme vous le feriez en win32 normal. Avec la seule différence qu'au lieu de l'HINSTANCE j'utilise le HMODULE que je reçois lors du chargement de la DLL.Affichage de DialogBox et MessageBox à partir de DLL

Tout semble fonctionner correctement, si je traverse mon code avec F10 (Visual C++ 2008) je peux même le voir passer par ma fonction DlgMessageProc et faire tout ce qu'il devrait faire. La seule chose étrange est qu'aucun dialogue n'est montré et que tout à coup il saute hors de la boucle de message et continue juste avec le reste du code ???

Weirly engough J'ai le même problème lors de l'appel MessageBox à l'intérieur de ma DLL, je reçois pas d'erreur, tout semble fonctionner correctement mais aucune fenêtre est affichée, ni le code interrompu (comme d'habitude avec MessageBoxes)

La chose amusante est que j'ai un peu de code d'un livre qui utilise la même architecture de base que moi et si je compile que tout montre bien?

Donc, ma question, y a-t-il une option cachée, un commentaire pragama ou autre chose que je devrais regarder si je veux pouvoir montrer des boîtes de message et des dialogues de ma Dll?

Répondre

0

Dans la page de propriétés de l'éditeur de ressources Visual Studio pour la ressource de boîte de dialogue, vous devez spécifier une option dans laquelle vous pouvez spécifier "No Fail Create: True".

Habituellement, les boîtes de dialogue ne peuvent pas être créées car un contrôle commun ne peut pas être créé - généralement parce que InitCommonControlsEx n'a pas été appelé. La définition de l'indicateur de création sans échec permet de voir la boîte de dialogue et de déterminer les contrôles qui manquent.


Autres choses à vérifier:

  • Y at-il un message dans la fenêtre de débogage sur une exception de première chance? Peut-être son «saut» en raison d'une exception qui est attrapée et traitée silencieusement par Win32. Activez le débogage des exceptions first32 win32 dans la boîte de dialogue des exceptions de Dev Studio pour effectuer le suivi.

    Même cela n'expliquerait pas comment un appel MessageBox ne parviendrait pas à créer une boîte de message.

  • La seule fois Ive vu MessageBox ne parviennent au travail étaient quand:

    1. fuites de ressources ont fait la course de processus de poignées user32 disponibles - avez-vous vérifié vos applications gèrent compte à l'aide de gestionnaire de tâches?
    2. le système était en cours de fermeture. Avez-vous appelé PostQuitMessage, puis essayé de créer une boîte de dialogue/MessageBox?
+0

Non, désolé, cela ne fonctionne pas. BTW, j'ai appelé InitCommonControlls et ajusté mon manifeste afin que j'obtiens des boutons de style XP/VISTA, cela pourrait-il influencer quelque chose? Un autre mystère est pourquoi j'ai le même problème avec MessageBoxes? Ceux-ci devraient être complètement gérés par Windows.J'ai le sentiment que j'ai besoin de lier quelque chose de plus ou de définir une option de ligne de commande, mais je n'ai absolument aucune idée. Je vais essayer de voir si je peux reconstruire ma solution sans le manifeste ajusté, mais je ne pense pas que cela fera beaucoup. –

+0

J'ai redémarré mon système et exécuté la solution mais rien ne s'est passé. Puis j'ai ajouté un messagebox à une bibliothèque statique qui est également appelée et découvert que le problème est encore pire. J'ai cette bibliothèque statique qui doit fonctionner, créer un périphérique et libérer un périphérique, et si je mets une boîte de message, il ne se passe rien non plus. Si je mets une boîte de message dans la partie principale du fichier exe qui lie au fichier .lib, il y a une boîte de message normale. Donc, il n'y a rien de mal avec mon système !!!!! Je n'ai pas non plus trouvé d'erreurs ou d'avertissements dans ma fenêtre de sortie de débogage –

0

Non que je pensais, chaning le manifeste ne permet pas du tout. J'ai également créé un projet séparé où je viens de tester le dialogue et sa fonction proc et là tout fonctionne parfaitement (liens vers un fichier .exe au lieu de dll)

Questions connexes