c++ - HTMLHelp 函数在 64 位应用程序上崩溃
问题描述
我正在为我的 MFC winforms 应用程序集成特定于上下文的帮助。根据崩溃日志,调用以下函数会使我的应用程序崩溃,而 hhctrl.ocx 是罪魁祸首。我认为问题出在 System32 位文件夹中的 64 位版本的 hhctrl.ocx 上,因为我的应用程序在 32 位模式下工作正常。我尝试注册 32 位和 64 位 ocx 但这没有帮助。
//added following line in InitInstance of application
DWORD m_dwCookie;
HtmlHelp(NULL, NULL, HH_INITIALIZE,(DWORD)&m_dwCookie);
我知道这是用于 html 帮助集成的非常古老的 API。如果我无法解决这个问题,是否有用于将帮助文件集成到 MFC 应用程序的替代框架?
解决方案
您的代码中存在问题,在HtmlHelp
调用的最后一个参数中。您将其转换为一个DWORD
值,这是您不应该的。这将适用于 32 位系统,其中指针(地址)是 32 位值,但在 64 位平台/构建中,指针是 64 位,因此您的转换DWORD
将消除高 32 位,然后(自动)“重新提升”为 64 位值时留下无效地址。
您需要使用的是DWORD_PTR
类型,而不是(根据需要,32 位或 64 位平台的大小会有所不同):
DWORD m_dwCookie;
HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD_PTR)&m_dwCookie); // DWORD_PTR != DWORD
推荐阅读
- spotfire - 在 spotfire 中保存用户输入
- powershell-core - 如何在 PowerShell 核心中创建永久别名文件?
- javascript - Javascript 运算符“in”不适用于浮点数
- swift - Render text with SKRenderer
- java - 如何检查 JAVA 代码(保留在数据库中)是否正确完成或突然终止?
- xamarin.forms - Xamarin iOS build error - Native linking failed (Link Framework SDKs Only)
- django - 对于 nginx,我是在为这个 url https://localhost:3000 监听端口 443 还是端口 3000?
- c# - AnimationPlayer animations do not play in Godot
- ionic-framework - ionic cordova run android - Ionic 4 命令卡住
- c++ - 提升 Asio 同步 https 调用