从DLL显示DialogBox和MessageBox

时间:2009-09-05 17:30:59

标签: dll dialog messagebox hidden

我在DirectX10游戏引擎上遇到问题,我遇到了与DirectX无关的问题:P问题是在包含引擎的DLL中有时会调用DialogBox,就像你会做的那样在正常的win32。唯一不同的是,我使用加载DLL时得到的HMODULE而不是HINSTANCE。

一切似乎工作正常,如果我使用F10(Visual C ++ 2008)逐步执行我的代码,我甚至可以看到它通过我的DlgMessageProc函数并完成它应该做的一切。唯一奇怪的是,没有显示任何对话框,突然间它跳出了消息循环并继续使用其余的代码???

Weirly engough我在DLL中调用MessageBox时遇到同样的问题,我没有错误,一切似乎工作正常但没有显示窗口,代码也没有停止(正常情况下是消息框)

有趣的是,我有一些书中的代码,它使用与我相同的基本架构,如果我编译,一切都显示得很好?

所以我的问题是,如果我想能够从我的Dll显示MessageBoxes和Dialogs,是否有任何隐藏的选项,pragama评论或其他我应该看的东西?

2 个答案:

答案 0 :(得分:0)

在visual studio资源编辑器的对话框资源的属性页面中,应该有一个选项,您可以在其中指定 - “No Fail Create:True”。

通常,对话框无法创建,因为无法创建公共控件 - 通常是因为尚未调用InitCommonControlsEx。设置No Fail Create标志可以查看对话框并确定缺少哪些控件。


其他要检查的事项:

  • 调试窗口中是否有关于第一次机会异常的消息?也许它的'跳出'是因为Win32正在捕获并默默处理异常。在Dev Studio例外对话框中打开第一次机会win32异常的调试以跟踪它。

    即使这样也无法解释MessageBox调用如何无法创建消息框。

  • 我见过MessageBox失败的唯一时间是:

    1. 资源泄漏导致流程耗尽可用的user32句柄 - 您是否使用任务管理器检查了应用程序句柄数?
    2. 系统正处于关闭状态。你有没有调用PostQuitMessage然后尝试创建一个对话框/ MessageBox?

答案 1 :(得分:0)

不,我认为,查明清单根本没有帮助。我还创建了一个单独的项目,我只是测试对话框及其proc函数,一切都很完美(链接到.exe而不是dll)