gpt4 book ai didi

c++ - 为什么我在尝试调用 CDHtmlDialog::OnInitDialog() 时看到崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:52 24 4
gpt4 key购买 nike

我向我的 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>

最佳答案

尝试在 HTML 中引用所有 ID 属性值,并仔细检查 ID 属性是否与 DHTML_EVENT_MAP 中的引用匹配。

我猜测在 ID 属性的大小写敏感性或丢失的 HTML 元素的处理方面,IE 版本之间存在不同的行为。最终结果可能是基本 OnInitDialog() 类无法连接到那些安装了特定版本的 Internet Explorer 的机器上的文档对象模型中的某些元素。

鉴于 history of IE , 这种行为很可能潜入一个版本然后随后被删除。

这一定只是一个有根据的猜测:我无法访问所有早期版本的 IE 来确认此行为...

关于c++ - 为什么我在尝试调用 CDHtmlDialog::OnInitDialog() 时看到崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com