【发布时间】:2010-04-16 19:26:11
【问题描述】:
我在我的 mfc 应用程序中添加了一个 helpAbout 菜单项。我决定让 ddlg 从 CDHTMLDialog 派生。
我在派生类中重写了 OnInitDialog() 方法,我做的第一件事是调用父类的 OnInitDialog() 方法。
然后我输入设置标题的代码。
在某些机器上这工作正常,但在其他机器上它在调用时崩溃
CDHtmlDialog::OnInitDialog() - 试图读取一个空指针。
调用堆栈没有任何用处 - 它在 mfc90.dll 中
这是 mfc/win32 dll 不匹配的潜在问题吗?
它在我的 vista 机器上工作,但在 win2003 服务器上崩溃。
BOOL HTMLAboutDlg::OnInitDialog()
{
// CRASHES on the following line
CDHtmlDialog::OnInitDialog();
CString title = "my title"; // example of setting title
... other code
SetWindowText(title);
return TRUE; // return TRUE unless you set the focus to a control
}
这里是相关的头文件:
class HTMLAboutDlg : public CDHtmlDialog
{
DECLARE_DYNCREATE(HTMLAboutDlg)
public:
HTMLAboutDlg(CWnd* pParent = NULL); // standard constructor
virtual ~HTMLAboutDlg();
// Overrides
HRESULT OnButtonOK(IHTMLElement *pElement);
HRESULT OnButtonCancel(IHTMLElement *pElement);
// Dialog Data
enum { IDD = IDD_DIALOG_ABOUT, IDH = IDR_HTML_HTMLABOUTDLG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
DECLARE_DHTML_EVENT_MAP()
};
我不知道发生了什么——特别是为什么它在某些机器上工作而在其他机器上崩溃。
两者都安装了 VS2008
Visual Studio 为每台机器报告以下内容:
VISTA - 没有崩溃 9.0.30729.1 SP
2003 服务器:(崩溃) 9.0.21022.8 RTM
编辑 - html 代码
<HTML>
<BODY ID=HTMLAboutDlg BGCOLOR=WHITE>
<TABLE WIDTH=100%>
<TR WIDTH=100% HEIGHT=75>
<TD ALIGN=CENTER VALIGN=TOP>
<font color="#707880">by </font><a ID=LinkCP target=_blank href='http://www.mywebsite.com'><font color="#000000">my</font><font color="#2554C7">web</font><font color="#7093DB">site</font></a>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT ALIGN=BOTTOM>
<BUTTON STYLE="WIDTH:80" ID="ButtonOK">OK</BUTTON><BR>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
【问题讨论】:
-
两者的服务包版本相同吗?
-
@Peter - 向问题添加了 VS 版本信息
-
如果去掉“...其他代码”和 SetWindowsText() 调用,它还会崩溃吗?
-
@Mike - 其他代码永远不会被执行。崩溃是我在评论中指出的地方。它在 CDHtmlDialog::OnInitDialog();
-
我进行了搜索,但没有发现任何有用的信息可以帮助您,因此我建议尝试通过使用最简单的 HTMLAboutDlg 类创建一个新项目来隔离问题,该类仅实现 OnInitDialog() 仅此而已。如果它在所有平台上都运行良好,请有选择地从您的真实类中添加代码,直到它再次开始崩溃。