HTML Help Workshop устанавливаются с 2-х основными исполняемыми файлами:
hhc.exe
является консоли версии HTML Help Compiler.
hhw.exe
является Windows GUI версия HTML Help Compiler.
Но компиляция HTML-проекта справки (hhp) для скомпилированного HTML (chm) напрямую не выполняется этими двумя исполняемыми файлами.
Оба используются для компиляции hha.dll
- Библиотека справки HTML-справки - путем вызова экспортируемой функции HHA_CompileHHP
.
Экспортируемые функции этой библиотеки являются:
- EditHhCtrlObject
- EditHhCtrlScript
- FreeFilterDIB
- HHA_CompileHHP
- LoadFilterImage
- LoadJpeg
Корпорация Майкрософт не опубликовала ни одной документации, ни деклараций функций этих функций, насколько я знаю.
Я полагаю от некоторых быстрых тестов с hhc.exe
что функция HHA_CompileHHP
имеет BOOL
как тип возврата, который является int
и возвращается на успех TRUE
, то есть значения 1
, и в случае неудачи FALSE
, т.е. значения 0
. И похоже, что hhc.exe
использует это возвращаемое значение, не инвертируя значение как код выхода/возврата.
Поэтому errorlevel
является 1
по успеху и 0
при аварии.
тесты я сделал, чтобы проверить мое предположение:
Run HTML Help компилятора с именем файла проекта, который не существует:
hhc.exe index_1.hhp
Unable to open index_1.hhp.
Выход кода соответственно errorlevel
0. Это сообщение об ошибке печатается hhc.exe
, потому что сообщение об ошибке можно найти в hhc.exe
.
Set только для чтения файла атрибут на уже существующий выходной файл index.chm
и запустить HTML Help компилятор:
attrib +r index.chm & hhc.exe index.hhp & attrib -r index.chm
HHC5010: Error: Cannot open "C:... folder path ...\index.chm". Compilation stopped.
Код выхода соответственно errorlevel
0. Это сообщение об ошибке печатается hha.dll
, потому что это сообщение об ошибке можно найти только в hha.dll
.
Переименование * .htm файла явно указанный в index.hhp
и запустить HTML Help Compiler:
ren "file.htm" "renamed file.htm" & hhc.exe index.hhp & ren "renamed file.htm" "file.htm"
Microsoft HTML Help Compiler 4.74.8702
Compiling C:... folder path ...\index.chm
HHC5003: Error: Compilation failed while compiling file.htm.
The following files were not compiled:
file.htm
Код выхода соответственно errorlevel
0. Это сообщение об ошибке выводится также hha.dll
из-за этой ошибки сообщение может быть найдено только в hha.dll
.
Все сообщения об ошибках записываются в обращении STDOUT и не STDERR в качестве типичных для консольных приложений. Никогда не было другого значения, кроме 0 или 1, назначенного errorlevel
, поэтому я полагаю, что функция HHA_CompileHHP
возвращает простое булево значение.
Вывод:
Противоположный как обычно должно быть сделано, чтобы оценить на успех/провал в HTML-справки компиляции, например, путем использования в пакетном файле:
"%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" index.hhp
if not errorlevel 1 exit /B 1
В Помощь проекту HTML file (* .hhp file) в разделе [OPTIONS]
файл журнала может быть указан Error log file=...
, в который все сообщения, выводимые HHA_CompileHHP
, записываются дополнительно для их печати до STDOUT.
Но в этом случае с порождающим Doxygen * .hhp файл будет легче перенаправлять STDOUT в пакетный файл в файл журнала, хотя это тоже не очень нужны, потому что, скорее всего, сервер Team Foundation является фиксируя сообщения уже в журнале. (У меня не установлен Team Foundation Server.)
Это проблема, которая регулярно и головоломка возникает из-за того, что hhc.exe возвращает не ожидаемое возвращаемое значение. Какую версию doxygen вы используете, и используете ли вы hhc.exe с помощью doxygen или отдельно? – albert
Версия Doxygen: 1.8.11, и я запускаю ее отдельно (скрипт сборки и повторяемость в CMD). Оба имеют такое же поведение. –
Что произойдет, если вы запустите его внутри doxygen? или это невозможно. В последнем случае вы игнорируете код ошибки в файле сценария сборки. – albert