C#生成CHM文件(外篇使用hha.dll)
在《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 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)相关推荐
- C#生成CHM文件(应用篇)之代码库编辑器(1)
下面的这个系列是以一个小软件的开发过程为基础,和大家分享下我在开发这个软件时遇到的一些问题和总结. 先更新下软件:代码库编辑器Beta版下载 ,上一版的程序见<C#生成CHM文件(应用篇)> ...
- C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】
经历了快一个月的开发(因为都是在闲暇时间做的,实际实际可能不到一周),AlexisEditor总算完成了. 这边说明一下为什么有些网友不能新增文章的问题. 原因是路径中有中文字符,我一直用的是英文系统 ...
- C#生成CHM文件(应用篇)之代码库编辑器(3)【附源代码下载】
在这篇文章中,我将介绍AlexisEditor项目下主要Form的实现,即MainForm.EditForm. MainForm MainForm包含的主要变量如下 以frm开头的都是对应的窗体变量, ...
- C#生成CHM文件(汇总篇)
本文是前面的C#生成CHM文件系列文章的汇总以及一些其他的关于CHM的资料链接等. C#生成CHM文件(入门篇) http://www.cnblogs.com/alexis/archive/2010/ ...
- C#生成CHM文件(中级篇)
在上篇<C#生成CHM文件(入门篇)>中,我们利用微软自带的hhc.exe以编程的方式创建一个CHM文件,而且调用的是一个静态的HMTL文件. 在中篇中,实现以下几个目标 1.将在线 ...
- C# 生成CHM文件 资料汇总
本文是前面的C#生成CHM文件系列文章的汇总以及一些其他的关于CHM的资料链接等. C#生成CHM文件(入门篇) http://www.cnblogs.com/alexis/archive/2010/ ...
- C#生成CHM文件(应用篇)
在入门篇中我们了解到如何使用C#调用hhc.exe来生成CHM文件,而在中篇中,我们进行了CHM反编译和将CHM文件转化为Word.在下篇中,我将简单介绍下这些技术在如何应用在实际项目中. CHM电子 ...
- 使用Teleport Ultra批量克隆网站,使用Easy CHM合并生成chm文件
1.要下载的页面 http://www.howsoftworks.net/javaapi/ 2. 下载Teleport Ultra 3.使用Teleport Ultra批量克隆网站 4.下载Easy ...
- 用C#生成Excel文件的方法和Excel.dll组件生成的方法
NET Framework1.0和1.1 都没有实现OleContainer组件.查遍MSDN,最后得了一个提示:可以使用IEBrowser来模拟OleContainer.这绝对是一个超重的实现,不过 ...
最新文章
- hud 5929.Basic Data Structure
- 微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
- SLAM: Orb_SLAM的使用小综述
- quartz中定时表达式详解
- 古风手机壁纸,国潮的你不可错过!
- php判断汉字是否相等,JavaScript
- Cent OS 下 VI 使用方法
- 代码覆盖率:80%,不能少(转)
- 《概率论与数理统计》(浙大第四版)第七章总结笔记(纯手写)
- c语言写测试地下水流速,《C语言》课程教学大纲 总学时:总学时64;理论44;实验20 学分:3.5 .doc...
- Redis Key(键) 命令使用
- 基于JSP微信小程序汽车票订票售票系统设计与实现
- 职场PUA:为什么你就不能逼自己一把呢?
- INV模块常用表结构
- CentOS 各版本的下载
- 淘宝钓鱼网站抓不住吗
- remove 删除文件
- Koch雪花曲线的MATLAB实现
- robot selenium+python 对火狐浏览器进行网页自动化测试 报错历程
- PowerPoint2007无法嵌入某些字体
热门文章
- 抛弃UITableView,让所有列表页不再难构建
- Android studio 下 JNI 开发实例
- Spring Boot项目部署到Heroku
- kubernetes集群网络配置方案——flannel部署
- hookup_2.10-0.2.3.jar包下载
- 挨踢项目求生法则-战略篇
- tomcat resin nginx处理MIME类型
- Linux 运维工程师入门须掌握的 10 个技术点
- json数据在前端(javascript)和后端(php)转换
- ASP.NET MVC and jqGrid 学习笔记 2-如何从本地获得数据