我在DirectX10游戏引擎上遇到问题,我遇到了与DirectX无关的问题:P问题是在包含引擎的DLL中有时会调用DialogBox,就像你会做的那样在正常的win32。唯一不同的是,我使用加载DLL时得到的HMODULE而不是HINSTANCE。
一切似乎工作正常,如果我使用F10(Visual C ++ 2008)逐步执行我的代码,我甚至可以看到它通过我的DlgMessageProc函数并完成它应该做的一切。唯一奇怪的是,没有显示任何对话框,突然间它跳出了消息循环并继续使用其余的代码???
Weirly engough我在DLL中调用MessageBox时遇到同样的问题,我没有错误,一切似乎工作正常但没有显示窗口,代码也没有停止(正常情况下是消息框)
有趣的是,我有一些书中的代码,它使用与我相同的基本架构,如果我编译,一切都显示得很好?
所以我的问题是,如果我想能够从我的Dll显示MessageBoxes和Dialogs,是否有任何隐藏的选项,pragama评论或其他我应该看的东西?
答案 0 :(得分:0)
在visual studio资源编辑器的对话框资源的属性页面中,应该有一个选项,您可以在其中指定 - “No Fail Create:True”。
通常,对话框无法创建,因为无法创建公共控件 - 通常是因为尚未调用InitCommonControlsEx。设置No Fail Create标志可以查看对话框并确定缺少哪些控件。
其他要检查的事项:
调试窗口中是否有关于第一次机会异常的消息?也许它的'跳出'是因为Win32正在捕获并默默处理异常。在Dev Studio例外对话框中打开第一次机会win32异常的调试以跟踪它。
即使这样也无法解释MessageBox调用如何无法创建消息框。
我见过MessageBox失败的唯一时间是:
答案 1 :(得分:0)
不,我认为,查明清单根本没有帮助。我还创建了一个单独的项目,我只是测试对话框及其proc函数,一切都很完美(链接到.exe而不是dll)