zoukankan      html  css  js  c++  java
  • 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 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

     

  • 相关阅读:
    观光奶牛Sightseeing Cows (二分+spfa(dfs))
    卢卡斯定理学习笔记
    分层图学习笔记
    热烈祝贺CRMEB运营中心乔迁新址
    CRMEB知识付费系统v1.2发布上线直播带课功能
    推荐一款超好用码云start超4.9k采用前后端分离开发的小程序商城源码
    crmeb打通版3.x小程序商城公众号重复无限刷新登陆解决
    如何利用CRMEB 3.2打通版小程序商城做直播带货
    crmeb打通版开源微信公众号小程序商城框架源码
    一文读懂知识付费平台的运营方向及平台选择
  • 原文地址:https://www.cnblogs.com/alexis/p/1883745.html
Copyright © 2011-2022 走看看