1、首先需要已经编译好的.chm文件,路径按需要自己设置(后续会写一篇编辑、生成.chm文件的文章,以供参考);
2、 作者的编译环境:win10 64位,VS2010 ,64位程序(注意!过程中遇到编译不通过的就由此产生);
3、 VS2010新建 project后,需要配置好相应的运行环境,包括:“htmlhelp.h”,“htmlhelp.lib”
简单的办法是:
(1) 将htmlhelp.h置于路径,当前工程“..\\Include\\”;(完全自定义,个人喜好问题)
(2) 将htmlhelp.lib置于路径,当前工程“..\\Lib\\”;(完全自定义,个人喜好问题)
(3)项目->工程属性->C/C++ 附加包含目录 将htmlhelp.h添加进去,以及 项目->工程属性->链接器->附加依赖库 将htmlhelp.lib添加进去;
或者可参考论坛内其他博主的技术博客。
4、打开工程 main.cpp,添加:#include "htmlhelp.h";
5、调用函数: HWND hwnd = HtmlHelp(NULL, (LPCSTR)helpFilePath,HH_DISPLAY_TOPIC, NULL);
作者写了一个button响应函数:
void CTestHtmlHelpDlg::OnBnClicked()
{
CString strHelp;
strHelp =_T("E:\\TestHtmlHelp\\Test.chm");
//(测试功能采用了绝对路径,实际中可用 GetModuleFileName()自己解析.chm所在路径)
char charHelp[MAX_PATH];
strcpy(charHelp, strHelp);
HWND helpwnd = ::HtmlHelp(GetSafeHwnd(),charHelp,HH_DISPLAY_TOPIC,NULL) ;
}
在32位程序下,编译顺利通过。
问题来了,输出64位程序报错:
“无法解析的外部符号 HtmlHelpA,该符号在函数.....................”
大多数出现无法解析的外部符号问题,解决办法可以参考博客:https://blog.csdn.net/pan5690983/article/details/80061469
本文中作者各中办法都试了,依然报这个错误,后来一想输出的64位,而经过查询得知使用的htmlhelp.lib是32位,问题找到后,将该lib替换掉即可,但是MS并没有专门发布64位的.lib,在 Stackoverflow中找到了解决办法(https://stackoverflow.com/questions/85872/linking-htmlhelp-lib-with-x64),
从Microsoft SDK中找到这个64位.lib
替换后,问题得到解决。