在《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的設置選項,去掉“刪除臨時文件”來獲得),有興趣的朋友可以更加深入,比如獲得編譯進度信息,顯示編譯進度等等。。。。
新聞熱點
疑難解答