IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Загрузка файла в Паскале
сообщение
Сообщение #1


Гость






Здравствуйте.
Во время выполнения программы надо загружать exe-файл. Пользуюсь Exec (a,B), под win3.11.
Но файл не загружается.
(Хотел загрузить mplayer, чтобы играла фоновая музыка.)
Очень прошу помочь.  
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Если надо запустить программу то есть функция ShellExecute(...). Щас не вспомню всех параметров, но не забудь добавить модуль ShellApi
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Цитата
Если надо запустить программу то есть функция ShellExecute(...). Щас не вспомню всех параметров, но не забудь добавить модуль ShellApi

Это же в Delphi а не в паскале...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 3

Репутация: -  0  +


Вот простейший пример. Твоя программа запускает на исполнение другой ехе-файл. Смотри. В диррективе $M все стоит стандартно, кроме последней цифры - это размер кучи. Его можешь попробовать изменять экспериментально. Если ты его поставишь слишком большой, то переменная DosError будет давать код ошибки 8.

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

uses Dos;

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

Удачных экспериментов!!!


--------------------
Пропал исходный модуль, нашедшего просим вернуть отлаженным за приличное вознаграждение.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


А этот алгоритм работает в вин хп? я не смог этого добиться...
прочитал хелп, переписал пример, но эффекта нет...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Qleek
Посмотри здесь, был работающий пример...
Код поиска и копирования
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Код
uses dos;
begin
swapvectors;
exec('start.exe','1024');
swapvectors
end.

Не работает... где то пол секунды держится черный экран а потом она закрывается и не запускает файл...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






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

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

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 20.08.2017 7:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"