Помощь - Поиск - Пользователи - Календарь
Полная версия: Загрузка файла в Паскале
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
denic
Здравствуйте.
Во время выполнения программы надо загружать exe-файл. Пользуюсь Exec (a,B), под win3.11.
Но файл не загружается.
(Хотел загрузить mplayer, чтобы играла фоновая музыка.)
Очень прошу помочь.  
Nexus
Если надо запустить программу то есть функция ShellExecute(...). Щас не вспомню всех параметров, но не забудь добавить модуль ShellApi
mj
Цитата
Если надо запустить программу то есть функция ShellExecute(...). Щас не вспомню всех параметров, но не забудь добавить модуль ShellApi

Это же в Delphi а не в паскале...
Clane
Q:> А как из моей программы запустить другую?

A: С помощью процедуры Exec:

       SwapVectors;
       Exec(Путь&ИмяВашейПрограммы, Доп_Параметры);
       SwapVectors;

Q:> А почему внешняя программа из моей не запускается?

A: А память кто будет внешней проге отдавать?
  По умолчанию все 640Kb отдаются твоей программе.
  Исправить это можно либо через Options/Memory Sizes../ High heap limit,
  либо директивой компилятора:
      {$M 4096,0,10000}
  Здесь первая цифра - память под стек (в стеке размещаются локальные
  переменные каждой вызываемой процедуры/функции),
  вторая - нижняя граница памяти, третья - верхняя.
  В данном примере твоей программе отдается 10000 байт,
  а все остальное - внешней программе.

Q:> А если мне самому память нужна?

A: Используй библиотеку для своппинга (выгрузки из памяти) в XMS/EMS/Disk -
  перед запуском внешней программы твоя программа вместе со всеми данными
  переписывается в XMS/EMS или на винт, а после завершения внешней -
  восстанавливается.
  Можно воспользоваться, например, юнитом SPAWNO от Ральфа Брауна,
  или модулем OpExec из ObjectProf by TurboPower.
Proximo
Вот простейший пример. Твоя программа запускает на исполнение другой ехе-файл. Смотри. В диррективе $M все стоит стандартно, кроме последней цифры - это размер кучи. Его можешь попробовать изменять экспериментально. Если ты его поставишь слишком большой, то переменная DosError будет давать код ошибки 8.

{$M 16384,0,5000}
Program Exc;

uses Dos;

begin
 Exec ('c:bpt.exe', '');
end.

Удачных экспериментов!!!
Qleek
А этот алгоритм работает в вин хп? я не смог этого добиться...
прочитал хелп, переписал пример, но эффекта нет...
volvo
Qleek
Посмотри здесь, был работающий пример...
Код поиска и копирования
Qleek
Код
uses dos;
begin
swapvectors;
exec('start.exe','1024');
swapvectors
end.

Не работает... где то пол секунды держится черный экран а потом она закрывается и не запускает файл...
volvo
Qleek
Покажи исходник (start.pas). Я надеюсь, файл "start.exe" находится в той же директории, что и вызывающий?

Кстати, в вызывающем модуле должна быть директива "{$m 4000, 0, 0}", ну или что-то похожее. Ее у тебя нет (а без нее - недостаточно памяти для запуска субпроцесса)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.