在《C#生成CHM文件》一系列中,我们是以微软自带的hhc.exe来编译CHM文件的,这样有一个弊端就是当我们的机器里面并没有装hhc.exe就会报错,这通常在盗版的Windows系统比较常见,而正版的windows会默认帮我们安装hhc.exe,一般的默认路径是C:\Program Files\HTML Help Workshop或者C:\Program Files(X86)\HTML Help Workshop。

为了解决这个问题,我们可以使用hha.dll来编译CHM文件,这也是许多CHM生成软件这样做的。

网上关于hha.dll的资料比较少,因为微软并没有公布hha.dll的函数,不过还是有几个牛人将函数给我们弄出来了,比如“夜闻香”,本文是在此基础上做的。

实际上其CHM项目编译器的HHA.DLL中提供了名为HHA_CompileHPP的导出函数,实现了对.hpp的CHM项目文件直接进行编译,并通过两个回调函数通知用户当前编译进度。

下面是HHA_CompileHPP的原型

BOOL WINAPI HHA_CompileHHP(PCSTR pszHhpFile, FARPROC pLogString, FARPROC pProgress, INT nRes);

我们可以使用DllImport来调用hha.dll中的函数.

主要的代码如下:

代码

 string log1;
        string log2;

delegate bool GetInfo(string log);

//编译信息
        public bool GetInfo1(string log)
        {
            log1 = log;
            return true;
        }

//进度信息
        public bool GetInfo2(string log)
        {
            log2 = log;
            return true;
        }

[DllImport("hha.dll")]
        private extern static void HHA_CompileHHP(string hhpFile, GetInfo g1, GetInfo g2, int stack);

public void Compile()
        {
            using (OpenFileDialog ofd=new OpenFileDialog())
            {
                ofd.Filter = "CHM项目文件|*.hhp";
                ofd.ShowDialog();
                if (ofd.FileName!="")
                {
                    HHA_CompileHHP(ofd.FileName, GetInfo1, GetInfo2, 0);
                    MessageBox.Show("编译成功");
                }
            }
        }

为了简单方便,我们这里是直接编译已经生生成的hhp文件(可以使用alexiseditor的设置选项,去掉“删除临时文件”来获得),有兴趣的朋友可以更加深入,比如获得编译进度信息,显示编译进度等等。。。。

代码是AlexisEditor项目下的HhaForm.cs

C#生成CHM文件(外篇使用hha.dll)相关推荐

  1. C#生成CHM文件(应用篇)之代码库编辑器(1)

    下面的这个系列是以一个小软件的开发过程为基础,和大家分享下我在开发这个软件时遇到的一些问题和总结. 先更新下软件:代码库编辑器Beta版下载 ,上一版的程序见<C#生成CHM文件(应用篇)> ...

  2. C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】

    经历了快一个月的开发(因为都是在闲暇时间做的,实际实际可能不到一周),AlexisEditor总算完成了. 这边说明一下为什么有些网友不能新增文章的问题. 原因是路径中有中文字符,我一直用的是英文系统 ...

  3. C#生成CHM文件(应用篇)之代码库编辑器(3)【附源代码下载】

    在这篇文章中,我将介绍AlexisEditor项目下主要Form的实现,即MainForm.EditForm. MainForm MainForm包含的主要变量如下 以frm开头的都是对应的窗体变量, ...

  4. C#生成CHM文件(汇总篇)

    本文是前面的C#生成CHM文件系列文章的汇总以及一些其他的关于CHM的资料链接等. C#生成CHM文件(入门篇) http://www.cnblogs.com/alexis/archive/2010/ ...

  5. C#生成CHM文件(中级篇)

    在上篇<C#生成CHM文件(入门篇)>中,我们利用微软自带的hhc.exe以编程的方式创建一个CHM文件,而且调用的是一个静态的HMTL文件.   在中篇中,实现以下几个目标  1.将在线 ...

  6. C# 生成CHM文件 资料汇总

    本文是前面的C#生成CHM文件系列文章的汇总以及一些其他的关于CHM的资料链接等. C#生成CHM文件(入门篇) http://www.cnblogs.com/alexis/archive/2010/ ...

  7. C#生成CHM文件(应用篇)

    在入门篇中我们了解到如何使用C#调用hhc.exe来生成CHM文件,而在中篇中,我们进行了CHM反编译和将CHM文件转化为Word.在下篇中,我将简单介绍下这些技术在如何应用在实际项目中. CHM电子 ...

  8. 使用Teleport Ultra批量克隆网站,使用Easy CHM合并生成chm文件

    1.要下载的页面 http://www.howsoftworks.net/javaapi/ 2. 下载Teleport Ultra 3.使用Teleport Ultra批量克隆网站 4.下载Easy ...

  9. 用C#生成Excel文件的方法和Excel.dll组件生成的方法

    NET Framework1.0和1.1 都没有实现OleContainer组件.查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer.这绝对是一个超重的实现,不过 ...

最新文章

  1. hud 5929.Basic Data Structure
  2. 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
  3. SLAM: Orb_SLAM的使用小综述
  4. quartz中定时表达式详解
  5. 古风手机壁纸,国潮的你不可错过!
  6. php判断汉字是否相等,JavaScript
  7. Cent OS 下 VI 使用方法
  8. 代码覆盖率:80%,不能少(转)
  9. 《概率论与数理统计》(浙大第四版)第七章总结笔记(纯手写)
  10. c语言写测试地下水流速,《C语言》课程教学大纲 总学时:总学时64;理论44;实验20 学分:3.5 .doc...
  11. Redis Key(键) 命令使用
  12. 基于JSP微信小程序汽车票订票售票系统设计与实现
  13. 职场PUA:为什么你就不能逼自己一把呢?
  14. INV模块常用表结构
  15. CentOS 各版本的下载
  16. 淘宝钓鱼网站抓不住吗
  17. remove 删除文件
  18. Koch雪花曲线的MATLAB实现
  19. robot selenium+python 对火狐浏览器进行网页自动化测试 报错历程
  20. PowerPoint2007无法嵌入某些字体

热门文章

  1. 抛弃UITableView,让所有列表页不再难构建
  2. Android studio 下 JNI 开发实例
  3. Spring Boot项目部署到Heroku
  4. kubernetes集群网络配置方案——flannel部署
  5. hookup_2.10-0.2.3.jar包下载
  6. 挨踢项目求生法则-战略篇
  7. tomcat resin nginx处理MIME类型
  8. Linux 运维工程师入门须掌握的 10 个技术点
  9. json数据在前端(javascript)和后端(php)转换
  10. ASP.NET MVC and jqGrid 学习笔记 2-如何从本地获得数据