Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.084 c
2-1195595872
azl
2007-11-21 00:57
2007.12.16
Table1.Filter


15-1194730016
Leonid Troyanovsky
2007-11-11 00:26
2007.12.16
Самые распространенные дельфийские заблуждения


11-1181727931
=BuckLr=
2007-06-13 13:45
2007.12.16
FontQuality - с чем едят?


15-1195208295
Асм
2007-11-16 13:18
2007.12.16
студия для асма


15-1194870352
Leonid Troyanovsky
2007-11-12 15:25
2007.12.16
Вредные советы чайникам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский