Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизПередача параметров другой программе. Найти похожие ветки
← →
Новичек © (2007-11-18 12:44) [0]Прошу помочь мне с таким вопросом.
Имеется программа, из которой запускается другая программа. А как этой другой программе передать некоторые данные?
Я зарегистрировал в обоих прогах собственное сообщение с помощью RegisterWindowMessage. А дальше как? Спасибо.
← →
Palladin © (2007-11-18 12:57) [1]Зачем тебе свое сообщение регистрировать? Есть стандартное WM_COPYDATA
← →
Anatoly Podgoretsky © (2007-11-18 12:58) [2]> Новичек (18.11.2007 12:44:00) [0]
Так сообщения или параметры?
← →
Новичек © (2007-11-18 13:01) [3]
> Так сообщения или параметры?
Параметры.
> Зачем тебе свое сообщение регистрировать? Есть стандартное
> WM_COPYDATA
Ну, конечно же :)
Спасибо, уважаемые знатоки.
← →
Anatoly Podgoretsky © (2007-11-18 13:03) [4]> Новичек (18.11.2007 13:01:03) [3]
Параметры, начиная с ДОС, передаются стандарно ИмяПрограммы параметры
← →
Новичек © (2007-11-18 13:04) [5]
> Параметры, начиная с ДОС, передаются стандарно ИмяПрограммы
> параметры
Не очень хотелось использовать этот метод.
← →
Anatoly Podgoretsky © (2007-11-18 13:05) [6]> Новичек (18.11.2007 13:04:05) [5]
Другого нет
← →
Palladin © (2007-11-18 13:07) [7]
> Новичек © (18.11.07 13:04) [5]
а чем он тебе плох то? ты просто изначально двусмысленный вопрос задал... то ли тебе данные нужно передать, то ли параметры... если передаваемые данные имеют четкую неизменную структуру и их немного, то, поверь, проще работать с параметрами...
← →
Новичек © (2007-11-18 13:12) [8]2Palladin
Ежели честно, то я несколько запутался. Передать необходимо строку.
← →
Palladin © (2007-11-18 13:14) [9]проще пареной репы
YourApp2.exe "<строка>"
ShowMessage(ParamStr(1));
другое дело если она может содержать управляемые символы или быть размером в пол гига :)
← →
Новичек © (2007-11-18 13:16) [10]Сейчас же испытаю.
← →
Anatoly Podgoretsky © (2007-11-18 13:25) [11]> Palladin (18.11.2007 13:14:09) [9]
С управляющими символами есть некоторая проблема, а с размером - каждой программе выделено 2 гб виртуального, адресного пространства.
← →
Anatoly Podgoretsky © (2007-11-18 13:25) [12]> Новичек (18.11.2007 13:16:10) [10]
Двойные кавычки нужные если строка содержит специальные символы, например и особенно пробелы.
← →
Palladin © (2007-11-18 13:40) [13]
> Anatoly Podgoretsky © (18.11.07 13:25) [11]
да ну :) а чего ж тогда
SetLength(s,500*1024*1024);
FillChar(s[1],Length(s),"a");
s[1]:=""";
s[Length(s)]:=""";
ShellExecute(0,nil,"project3.exe",PChar(s),nil,SW_NORMAL);
SE_ERR_OOM возвращает то? :)
← →
Anatoly Podgoretsky © (2007-11-18 13:46) [14]> Palladin (18.11.2007 13:40:13) [13]
А чего ты сюда привязал ShellExecute у него же ограничение на размер командной строки, используй CreateProcess
← →
Palladin © (2007-11-18 14:04) [15]ok :)
Var
s:String;
SI:TStartUpInfo;
PI:TProcessInformation;
l:Integer;
begin
s:=vtvProgramPath+"project3.exe "";
l:=Length(s);
SetLength(s,l+500*1024*1024);
FillChar(s[l+1],Length(s)-l-1,"a");
s[Length(s)]:=""";
ZeroMemory(@SI,SizeOf(SI));
SI.cb:=SizeOf(SI);
SI.dwFlags:=STARTF_USESHOWWINDOW;
SI.wShowWindow:=SW_SHOWNORMAL;
If Not CreateProcess(Nil,PChar(s),Nil,Nil,True,NORMAL_PRIORITY_CLASS,Nil,Nil,SI,PI) Then RaiseLastOSError;
end;
параметр почему то задан неверно :)
← →
Anatoly Podgoretsky © (2007-11-18 14:12) [16]Ты надеялся так легко отделаться?
← →
Новичек © (2007-11-18 14:13) [17]Проверил - работает :)
Только небольшой глюк - если
> YourApp2.exe "<строка>"
состоит из двух слов, то
> ShowMessage(ParamStr(1));
показывает второе слово :)
← →
Palladin © (2007-11-18 14:13) [18]я? нет :) я лишь разумно предупредил человека о существующих количественных ограничениях на общих размер, передаваемых через коммандную строку, параметров...
← →
Anatoly Podgoretsky © (2007-11-18 14:15) [19]
> Только небольшой глюк - если
> > YourApp2.exe "<строка>"
> состоит из двух слов, то
Приводи текст вызова.
Ты прочитал, что тебе написали про спецсимволы?
Кроме ParamStr есть и другие методы достучаться до командной строки.
← →
Новичек © (2007-11-18 14:23) [20]
> Приводи текст вызова.
Prog_Exe := CreateProcess("app2.exe", "one two", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
← →
Palladin © (2007-11-18 14:25) [21]
> Новичек © (18.11.07 14:23) [20]
я же не зря кавычки привел
CreateProcess(nil, "app2.exe "one two"", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
ps. CreateProcess возвращает логическое значение, а не то что ты думаешь
← →
Новичек © (2007-11-18 14:30) [22]Понял.
А почему такой вызов не срабатываетCreateProcess("app2.exe", " "one two" ", nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
← →
Anatoly Podgoretsky © (2007-11-18 14:34) [23]> Новичек (18.11.2007 14:30:22) [22]
CreateProcess это функция
← →
Palladin © (2007-11-18 14:36) [24]он срабатывает, несрабатывает ParamStr
← →
Новичек © (2007-11-18 14:39) [25]Понял, спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c