Для руководства к программе нужно написать пример запуска программы с командной строкой в разных языках программирования...
пример на делфи:
и ещё один вопрос... в командной строке параметры будут выделены кавычками "", как в C++ задать эти кавычки?Код:uses ShellApi; ... ShellExecute(0, nil, pChar(ExtractFiledir(paramStr(0))+'\SB.ProgramsTool.exe'), pchar(CmStr), nil, 5);
Что-то не очень въехал в предмет, но раз просят...
char commandline[]={"programname.exe"};
system(commandline);
а кавычки задать так:
char commandline_with_quotes[]={"programname.exe \"param1\" \"param2\""};
а если требуется как в примере полный путь на себя указать, то это из произвольной функции не сделать, нужно из main() или ее аналога.
<div class='quotetop'>Цитата(sweeper * 9.10.2010, 22:43) [snapback]357451[/snapback]</div>в папке программы лежит утилита (или в одной из подпапок), её надо запусить из программы...Что-то не очень въехал в предмет, но раз просят...
char commandline[]={"programname.exe"};
system(commandline);
а кавычки задать так:
char commandline_with_quotes[]={"programname.exe \"param1\" \"param2\""};
а если требуется как в примере полный путь на себя указать, то это из произвольной функции не сделать, нужно из main() или ее аналога.
[/b]
в теории так - "programname.exe", будет работать... но на делфи, если так написать и запустить программу с ярлыка в котором не указана рабочая папка... будет ошибка...
С++ в этом случае как себя поведет?
system(commandline); - это запуск ехе?
<div class='quotetop'>Цитата(Snake_B * 10.10.2010, 1:56) [snapback]357452[/snapback]</div>В данном случае не речь о C/C++, но о системном вызове. Поведет аналогично дельфям.
в папке программы лежит утилита (или в одной из подпапок), её надо запусить из программы...
в теории так - "programname.exe", будет работать... но на делфи, если так написать и запустить программу с ярлыка в котором не указана рабочая папка... будет ошибка...
С++ в этом случае как себя поведет?
[/b]
<div class='quotetop'>Цитата(Snake_B * 10.10.2010, 1:56) [snapback]357452[/snapback]</div>Это вызов системного вызова с параметром, в качестве параметра - указатель на строку, которая будет проинтерпретирована системой как содержащая команду.system(commandline); - это запуск ехе?
[/b]
Если нужно вызвать из рабочей папки, при условии, что текущая директория из самой программы не меняется, можно использовать "..\\..\\path\\filename.exe" или ".\\path\\filename.exe".
Если нужен абсолютный путь, его придется где-то найти. Например, так:
[code]
std::string g_program_path;
main(int argc, char **argv)
{
<div class='quotetop'>Цитата(sweeper * 9.10.2010, 23:12) [snapback]357454[/snapback]</div><div class='quotetop'>Цитата(Snake_B * 10.10.2010, 1:56) [snapback]357452[/snapback]В данном случае не речь о C/C++, но о системном вызове. Поведет аналогично дельфям.
в папке программы лежит утилита (или в одной из подпапок), её надо запусить из программы...
в теории так - "programname.exe", будет работать... но на делфи, если так написать и запустить программу с ярлыка в котором не указана рабочая папка... будет ошибка...
С++ в этом случае как себя поведет?
[/b]
<div class='quotetop'>Цитата(Snake_B * 10.10.2010, 1:56) [snapback]357452[/snapback]</div>Это вызов системного вызова с параметром, в качестве параметра - указатель на строку, которая будет проинтерпретирована системой как содержащая команду.system(commandline); - это запуск ехе?
[/b]
Если нужно вызвать из рабочей папки, при условии, что текущая директория из самой программы не меняется, можно использовать "..\\..\\path\\filename.exe" или ".\\path\\filename.exe".
Если нужен абсолютный путь, его придется где-то найти. Например, так:
[code]
std::string g_program_path;
main(int argc, char **argv)
{
Давай разберем.
Справочно: http://www.cyberforum.ru/delphi-begi...read21742.html
Твой вызов
означает: в отдельном окне открыть программу с именем SB.ProgramsTool.exe, находящуюся в той же директории, что и текущая программа, передать ей список параметров, находящийся в переменной CmStr, каталог по умолчанию -- текущий, стиль окна = 5.Код:uses ShellApi; ... ShellExecute(0, nil, pChar(ExtractFiledir(paramStr(0))+'\SB.ProgramsTool.exe'), pchar(CmStr), nil, 5);
system воспринимает только один параметр -- командную строку. Возможно, существуют другие вызовы, аналогичные ShellExecute(), особенно в windows.
То есть для того, чтобы воспользоваться system(), нужно построить эту командную строку. Прямой перевод с твоего примера на дельфи будет:
А кавычки в списке параметров -- это где-то отдельно, так же как и формирование CmStr в твоем кодеКод:std::strinfg cmdline; cmdline=".\\SB.ProgramsTool.exe "+CmStr; // [sic] extra space between '.exe' and '"' system(cmdline.c_str());
Пример был на C++, на чистом C немного по-другому:
Впрочем, вопрос формирования списка параметров всё равно остается.Код:char cmdline[1024]={".\\SB.ProgramsTool.exe "}; strcat(cmdline,CmStr); system(cmdline);
<div class='quotetop'>Цитата(sweeper * 10.10.2010, 6:23) [snapback]357468[/snapback]</div>в общем то всё понятно...Давай разберем.
Справочно: http://www.cyberforum.ru/delphi-begi...read21742.html
Твой вызов
означает: в отдельном окне открыть программу с именем SB.ProgramsTool.exe, находящуюся в той же директории, что и текущая программа, передать ей список параметров, находящийся в переменной CmStr, каталог по умолчанию -- текущий, стиль окна = 5.Код:uses ShellApi; ... ShellExecute(0, nil, pChar(ExtractFiledir(paramStr(0))+'\SB.ProgramsTool.exe'), pchar(CmStr), nil, 5);
system воспринимает только один параметр -- командную строку. Возможно, существуют другие вызовы, аналогичные ShellExecute(), особенно в windows.
То есть для того, чтобы воспользоваться system(), нужно построить эту командную строку. Прямой перевод с твоего примера на дельфи будет:
А кавычки в списке параметров -- это где-то отдельно, так же как и формирование CmStr в твоем кодеКод:std::strinfg cmdline; cmdline=".\\SB.ProgramsTool.exe "+CmStr; // [sic] extra space between '.exe' and '"' system(cmdline.c_str());
Пример был на C++, на чистом C немного по-другому:
[/b]Код:char cmdline[1024]={".\\SB.ProgramsTool.exe "}; strcat(cmdline,CmStr); system(cmdline);
я так понимаю только вопрос об рабочем каталоге и абсолютных путях опять всплывает...
но я тут чё то не вьезжаю... раздел main... там что то вроде... основного цикла/кода программы? т.е. обработка не как на делфи (при возникновении события).... а что то вроде консольного приложения делфи...?
ну это так.... для общего развития ))
<div class='quotetop'>Цитата(sweeper * 10.10.2010, 6:23) [snapback]357468[/snapback]</div>формирование списка параметров в общем то я думаю не проблема, их можно просто строкой заполнить:Впрочем, вопрос формирования списка параметров всё равно остается.
[/b]
'0 '+ProName+' '+ProVers+' '+Lang+' '+PatchToExe+' '+URLtoFile+' '+URLtoMSG
на пример так:
cmdline=".\\SB.ProgramsTool.exe "+"0 \"CardWars\" \"0.6.0\" \"Russian\"";
единственный изменяемый там параметр это путь к ехе-шнику запускающей программы...