[Watki] przechwycenie return code z zewnetrznej aplikacji

Odpowiedz Nowy wątek
2006-09-25 16:19
GregK
0

witam
mam nastepujacy problem

jest sobie fragment kodu, ktory wywoluje zewnetrzna aplikacje, przechwytuje jej wyjscie i wypisuje
i teraz potrzebuje przechwycic kod wyjscia tej aplikacji do systemu (czyli to co zwraca ona jako return), zeby obsluzyc bledy (program zwraca -1 gdy blad)

problem w tym, ze nie potrafie sie doszukac nigdzie jak to zrobic
aplikacja wywolywana jest w nastepujacy sposob:

tworzony jest proces przy pomocy funkcji CreateProcess, a nastepnie tworzymy watek (CreateThread)

w programie jest wywolywana funkcja GetExitCodeThread, jednak to co ona zwraca raczej nie ma nic wspolnego z tym, co ja potrzebuje

czy jest ktos w stanie mi pomoc ??
problem jest dosc pilny, ze tez nie powiem bardzo - musze to jutro skonczyc!!

z gory dziekuje
pozdrawiam

Pozostało 580 znaków

2006-09-25 16:37
0

a może by tak GetExitCodeProcess ?

Pozostało 580 znaków

2006-09-25 21:50
GregK
0

nie wiem jak nie moglem tej funkcji zauwazyc

zrobilem w domu prosty test, tworzac proces i funkcja dziala
zobacze jak to bedzie w pracy dzialalo przy tym kodzie, ktory tam mam, bo jest troche zagmatwany

dzieki bardzo

btw. tak na wszelki wypadek - czy da sie ta wartosc uzyskac w jakis sposob, po czy tam wywolaniu CloseHandle i we wszystkich innych przypadkach, gdy zostanie wykonany kod zamykajacy wszystko co jest z tym zwiazane??
jesli pytanie glupie to przepraszam, ale nigdy nie mialem do czynienia z tworzeniem watkow, a nie mam teraz zbyt duzo czasu na nauke tego

cos mi znajomy wspominal o tym, ze musialbym jakiegos callback'a napisac, ale nie mam pojecia jak i czy mial racje (a sam dobrze nie wiedzial)

pozdr

Pozostało 580 znaków

2006-09-26 15:41
0

Póki masz poprawne handle procesu to GetExitCodeProcess zwraca poprawne dane.
Zwrócona wartość może być jednym z:

  • wartość podana do funkcji ExitProcess lub TerminateProcess
  • wartość zwrócona z main/WinMain
  • kod unhandled exception
  • 259 (STILL_ACTIVE) - oznacza że proces jeszcze istnieje.

Nie zakładaj że 259 oznacza że proces jeszcze istnieje, bo można specjalnie napisać return 259 w main() żeby kogoś zmylić.
To co zwraca main nie ma żadnego sensu w aplikacjiach GUI, w szczególnych przypadkach używa się tej wartości uruchamiając aplikacje konsolowe typu parser, liker, assembler... aby zasygnalizować komuś że coś było źle.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0