Ответ 1
HTML Help Workshop установлен с двумя основными исполняемыми файлами:
-
hhc.exe
- это консольная версия компилятора HTML-справки. -
hhw.exe
- это Windows графический интерфейс HTML-компилятора HTML.
Однако компиляция HTML-проекта справки (hhp) для скомпилированного HTML (chm) напрямую не выполняется этими двумя исполняемыми файлами.
Оба используются для компиляции hha.dll
- библиотеки HTML Help Help - путем вызова экспортируемой функции HHA_CompileHHP
.
Экспортируемые функции этой библиотеки:
- EditHhCtrlObject
- EditHhCtrlScript
- FreeFilterDIB
- HHA_CompileHHP
- LoadFilterImage
- LoadJpeg
Корпорация Майкрософт не опубликовала ни одной документации или деклараций функций этих функций, насколько мне известно.
I предположим из некоторых быстрых тестов с hhc.exe
, что функция HHA_CompileHHP
имеет BOOL
как возвращаемый тип, который равен int
и возвращает успех TRUE
, то есть значение 1
и при отказе FALSE
, т.е. значение 0
. И похоже, что hhc.exe
использует это возвращаемое значение без инвертирования значения как код выхода/возврата.
Следовательно, errorlevel
является 1
при успехе и 0
при неудаче.
Тестирование, которое я сделал, чтобы проверить мое предположение:
-
Запустите компилятор справки HTML с именем файла проекта, который не существует:
hhc.exe index_1.hhp
Невозможно открыть index_1.hhp.
Код выхода, соответственно
errorlevel
равен 0. Это сообщение об ошибке печатаетсяhhc.exe
, потому что сообщение об ошибке можно найти вhhc.exe
. -
Установить атрибут только для чтения в уже существующий выходной файл
index.chm
и запустить компилятор HTML Help:attrib +r index.chm & hhc.exe index.hhp & attrib -r index.chm
HHC5010: Ошибка: не удается открыть "C:... path path...\index.chm". Компиляция остановлена.
Код выхода, соответственно
errorlevel
равен 0. Это сообщение об ошибке печатаетсяhha.dll
, потому что это сообщение об ошибке можно найти только вhha.dll
. -
Переименуйте файл *.htm, явно указанный в
index.hhp
, и запустите компилятор HTML Help:ren "file.htm" "renamed file.htm" & hhc.exe index.hhp & ren "renamed file.htm" "file.htm"
Компилятор справки Microsoft HTML 4.74.8702
Компиляция C:... путь к папке... \index.chm
HHC5003: Ошибка: компиляция завершилась неудачей при компиляции файла file.htm.
Следующие файлы не были скомпилированы:
file.htmКод выхода, соответственно
errorlevel
равен 0. Это сообщение об ошибке также печатается наhha.dll
, потому что это сообщение об ошибке может быть найдено также только вhha.dll
.
Все сообщения об ошибках записываются для обработки STDOUT, а не STDERR, как это типично для консольных приложений. Для errorlevel
никогда не было другого значения, кроме 0 или 1, поэтому я полагаю, что функция HHA_CompileHHP
возвращает простое логическое значение.
Вывод:
Противоположное, как обычно, должно быть сделано для оценки успеха/неудачи компиляции HTML-справки, например, с использованием в пакетном файле:
"%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" index.hhp
if not errorlevel 1 exit /B 1
В файле проекта справки HTML (файл *.hhp) в разделе [OPTIONS]
файл журнала может быть указан с помощью Error log file=...
, в который все сообщения, выводимые HHA_CompileHHP
, записываются дополнительно на печать их STDOUT.
Но в этом случае с Doxygen, генерирующим файл *.hhp, было бы проще перенаправить STDOUT в пакетном файле в файл журнала, хотя это также не очень необходимо, потому что, скорее всего, Team Foundation Сервер фиксирует сообщения уже в журнале. (У меня нет Team Foundation Server.)