Здравствуйте.
Во время выполнения программы надо загружать exe-файл. Пользуюсь Exec (a,B), под win3.11.
Но файл не загружается.
(Хотел загрузить mplayer, чтобы играла фоновая музыка.)
Очень прошу помочь.
Если надо запустить программу то есть функция ShellExecute(...). Щас не вспомню всех параметров, но не забудь добавить модуль ShellApi
Цитата
Если надо запустить программу то есть функция ShellExecute(...). Щас не вспомню всех параметров, но не забудь добавить модуль ShellApi
Это же в Delphi а не в паскале...
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.
Вот простейший пример. Твоя программа запускает на исполнение другой ехе-файл. Смотри. В диррективе $M все стоит стандартно, кроме последней цифры - это размер кучи. Его можешь попробовать изменять экспериментально. Если ты его поставишь слишком большой, то переменная DosError будет давать код ошибки 8.
{$M 16384,0,5000}
Program Exc;
uses Dos;
begin
Exec ('c:bpt.exe', '');
end.
Удачных экспериментов!!!
А этот алгоритм работает в вин хп? я не смог этого добиться...
прочитал хелп, переписал пример, но эффекта нет...
Qleek Посмотри здесь, был работающий пример...
Код поиска и копирования
Код
uses dos;
begin
swapvectors;
exec('start.exe','1024');
swapvectors
end.
Не работает... где то пол секунды держится черный экран а потом она закрывается и не запускает файл...
Qleek
Покажи исходник (start.pas). Я надеюсь, файл "start.exe" находится в той же директории, что и вызывающий?
Кстати, в вызывающем модуле должна быть директива "{$m 4000, 0, 0}", ну или что-то похожее. Ее у тебя нет (а без нее - недостаточно памяти для запуска субпроцесса)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.