Помощь - Поиск - Пользователи - Календарь
Полная версия: .chm и pascal
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Unconnected
Скомпилировал html файл справки(формат .chm),его требуется вызывать из программы на pascal. Pascal открывает .com и .exe. Мысли две: конвертировать chm в exe и открыть exe из программы(или паскаль открывает только dos-программы???),2я-это написать bat-файл со строчкой start help, и уже bat как-то вызвать из программы.
volvo
Смотри:
{$M $4000,0,0 }   { 16K stack, no heap }
uses Dos;
begin
SwapVectors;
Exec(getenv('comspec'), '/c hh.exe cpp.chm');
SwapVectors;
WriteLn('...back from Exec');
if DosError <> 0 then WriteLn('Dos error #', DosError)
else WriteLn('Exec successful. Child process exit code = ', DosExitCode);
end.

запускает этот самый cpp.chm, но проблема в том, что пока ты его не закроешь (т.е., пока субпроцесс не завершится), основная программа не продолжит выполняться...
Unconnected
Цитата
запускает этот самый cpp.chm, но проблема в том, что пока ты его не закроешь (т.е., пока субпроцесс не завершится), основная программа не продолжит выполняться...

Ну,это вполне приемлимо.Буду пробовать!
Unconnected
Вставил код в процедуру(Doserror мне не нужен), сначала просто главная программа сворачивалась и ничего не происходило,а потом вообще никакой реакции... unsure.gif
Procedure spravka;
{$M $4000,0,0}
begin
SwapVectors;
Exec(getenv('comspec'), '/c hh.exe help.chm');
SwapVectors;
end;
У меня справка называется help, а не cpp, думаю,это не важно)

Добавлено через 9 мин.
Help.chm находится в одной папке с программой.
volvo
А вот теперь верни на место DosError, запусти еще раз программу, и скажи, какое выдается сообщение, чему этот самый DosError равен... Я не просто так его оставил, оно ж для диагностики...
Unconnected
DosError #8

Добавлено через 2 мин.
Это недостаточно памяти для загрузки программы...Файл справки весит 34 кб

Добавлено через 11 мин.
Почему-то не хочет открывать даже однокилобайтовый файл блокнота.Тоже 8я ошибка
volvo
Цитата
Файл справки весит 34 кб
Это вообще не проблема. Мой файл cpp.chm весит 462К, и запускается... Можешь прикрепить проект полностью? (можно в PM)
Unconnected
Главный модуль - m_enigma. Через РМ отправить не удалось,ошибка базы данных.
volvo
Все нормально отправилось через PM, но вот проблема: твой проект не компилируется... А исправлять по второму разу то, что я тебе уже где-то показывал, я не имею никакого желания. Или присоединяй тот проект, который нормально (без ошибки #49) собирается, или ищи баг сам...
Unconnected
Volvo, сорри, случайно прикрепил модули шифрования,вызывающие ошибку 49. Сейчас прикрепил уже скомпилированные рабочие TPU(думаю,исходники модулей для шифрования не понадобятся).
volvo
Я чужими TPU-шками не пользуюсь (я уже говорил, что не запускаю бинарники. Хочешь я тебе вместо процедуры initgr2 всуну процедуру, которая отформатирует диск, откомпилирую и ты запустишь?)... Но проблема у тебя в том, что ты понапихал в свой проект столько всего, что даже обычная InitGraph завершается с ошибкой "не хватает памяти для инициализации графической подсистемы". Похоже, что проект надо серьезно перерабатывать, тут заменой двух-трех строк не отделаешься.
Unconnected
Volvo ,то есть ты хочешь сказать,что без переработки программы подключить справку не удастся? Просто переработать проект(как я понял,ты имел в виду оптимизацию и уменьшение размера кода) я просто не успею.
volvo
Удастся, но...

1) программа будет сворачиваться, поскольку работает в полноэкранном режиме. Т.е., свернулась, справка показалась, закрыл справку, щелкнул на иконку программы в TaskBar-е, чтобы ее развернуть (с учетом пункта 3 это у меня отработало, правда я поставил вызов spravka сразу после инициализации графики);
2) возможно, будет утеряно изображение, хранившееся на экране в момент, когда запускалась справка - придется перерисовывать его;
3) директиву {$M} в главной программе измени на
{$M $4000, 0, 65535}

4) пройдись по программе, хотя бы в процедурах op1 и op2 вынеси одинаковые массивы строк как типизированную константу в начало секции Implementation, чтоб не инициализировать массив так, как ты это делаешь;
5) процедура prisv вообще лишняя: точно так же mas2 выносится как типизированная константа, да и x1, x2, y1, y2 тоже. Randomize вносится в блок инициализации модуля, между begin и end...
6) Процедура Gen: зачем выделяется 52 строки по 255 символов, если используется только по 62? Можно же сделать String[62]... Памяти слишком много? Стек резиновый? Как видишь, нет... То же самое касается и всех остальных переменных (а особенно - массивов) типа String: проверь, не берешь ли ты их "с запасом", здесь он тебе совершенно не нужен - проект большой, лучше не перерасходовать память.
7) в модулях директива {$M} не работает (читай справку TP), можешь смело ее убирать оттуда.

Вроде все smile.gif
Unconnected
Volvo, большое спасибо за доходчивое разьяснение моих ошибок good.gif good.gif good.gif Сам бы я эти "щедрости" в памяти очень долго искал smile.gif
+!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.