ďťż

Ładny brzuch

Potrzebuje funkcje ktora pozwoli mi odpalic exe'ka z argumentami spod kodu.
Tylko problem jest w tym jak przekazac argument z ktorym zostala uruchomiona glowna aplikacja i dodac 2 inne.

Dla zobrazowania sytuacji:
Odpalam moj program z parametrem:

MojProgram.exe c:\plik.txt

Oczywiscie string "c:\plik.txt" ladnie siedzi w argv[1].

Nastepnie chce wywolac inny program spod mojej aplikacji ale z parametrami w stylu:

InnyProgram.exe argv[1] d:\plik.txt e:\plik.txt

Znalazlem cos takiego:
system("JakisProgram.exe argumenty");
Problem w tym, ze wszystkie argumenty musza (z tego co doszedlem sam) byc pisane od poczatku, czyli:
system("JakisProgram.exe c:\\plik.txt d:\\plik.txt e:\\plik.txt")

Niestety triki w stylu:
system("JakisProgram.exe %s d:\\plik.txt e:\\plik.txt",argv[1])
Nie daja oczekiwanego rezultatu.

Dorwalem tez kod pod winapi (i by mi nawet bardziej pasowal) ale efekty parametrow sa takie same jak powyzej. (albo z tablicy argv albo na sztywno)
SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = ""; <-exek ShExecInfo.lpParameters = ""; <-parametry ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOW; ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); WaitForSingleObject(ShExecInfo.hProcess,INFINITE);

Any idea?



polacz te argumenty w jeden string np. tym - strncat
i wtedy wywolaj system()
Użytkownik fernandez edytował ten post 22 listopad 2007, 00:57
Wygodniej pewnie będzie użyć sprintf'a. Choć niekoniecznie wydajniej (nie sprawdzałem co szybciej działa i jak jest różnica).
Użytkownik Ali240 edytował ten post 22 listopad 2007, 02:15
No ok, o tym tez pomyslalem, ale jak wywolac wyswietlenie sie stringa w funkcji system();
Ponadto musze tworzyc nowa tablice gdzie caly ciag sie musi zmiescic, a wezmy jeszcze pod uwage, ze string argv[1] moze byc baaardzo dlugi.

A jak by sobie poradzily z tym shellexecute albo createprocess?
Maja "lepiej" zalatwione podawanie parametrow?




No ok, o tym tez pomyslalem, ale jak wywolac wyswietlenie sie stringa w funkcji system();
Ponadto musze tworzyc nowa tablice gdzie caly ciag sie musi zmiescic, a wezmy jeszcze pod uwage, ze string argv[1] moze byc baaardzo dlugi.

A jak by sobie poradzily z tym shellexecute albo createprocess?
Maja "lepiej" zalatwione podawanie parametrow?

Przecież do system przekazuje się wskaźnik na tablicę charów - mylę się? Co do bardzo długiego ciągu - zrób sobie tablicę dynamiczną i przed skopiowaniem całości do niej ustaw jej odpowiedni rozmiar. A co do tworzenia nowej tablicy - już takie życie programisty c ;). A jakby była funkcja umożliwiająca taki zapis:

system("JakisProgram.exe %s d:\\plik.txt e:\\plik.txt",argv[1]);
to również została by utworzona nowa tablica tyle że wewnątrz tej funkcji ;).

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •