[ dalibor_zdravkovic @ 27.12.2009. 16:51 ] @
Na netu ima dosta dobrih besplatnih video i audio konvertera ali su odrađeni samo kao konzole aplikacije, cak im je dostupan i njihov izvorni kod kojeg mozete modifikovati po sopstvenoj želji, a zatim ga kompajlirati za određeni operativni sistem bilo linux ili windows, ili se pak mogu skinuti gotovi bildovi za određeni OS.
Npr.: Lame MP3, FLAC, FFMpeg itd.

Zelo bih da kreiram MFC aplikaciju koja bi stajala kao GUI (graficki korisnicki interfejs) između korisnika i date kozola aplikacije pa mi je neophodan neki tutorijal koji bi mi objasnio na koji način da u okviru MFC plikacije pozovem EXE koji vrsi konverziju prosledim mu parametre i prihvatam informacije koje taj EXE vraca npr. procenat izvrsene konverzije, formate konverzije itd.
[ mmix @ 27.12.2009. 17:36 ] @
Pogledaj CreateProcess API funkciju.
[ VladimirCDT @ 28.12.2009. 18:26 ] @
Ako zelis da koristis gotov .exe, onda CreateProcess. Medjutim, neces lako uspeti sa hvatanjem nekih medjurezultata (redirekcija izlaznog streama i tome slicno).
Ukoliko si spreman da se pozabavis opensource aplikacijom, onda ti je nebo granica. :)
[ Mihajlo Cvetanović @ 28.12.2009. 22:49 ] @
Jedan od parametara funkcije CreateProcess je i pointer na STARTUPINFO strukturu kojoj je moguće dati hendlove za input, output, i error. Onda preko pajpova čitaš s jednog, a pišeš u drugi.
[ dalibor_zdravkovic @ 28.12.2009. 23:07 ] @
Znam sve sam provalio, ima ceo postupak na MSDN-u:
Creating a Child Process with Redirected Input and Output

Nego problem je sledeci:
Svaki pajp ima kraj za čitanje i drugi kraj za upsi. Po ovom tutorijalu za OUT pajp iz procesa stranu za čitanje (Read stranu) ne možeš da koristiš ako prethodno ne zatvoriš stranu za upis (Write starnu) što zanči da moraš da sačekaš da proces odradi sve pa tek onda da preuzmeš odgovor, dok se među stanja ne mogu dobiti, tako da ako želiš npr. da hvataš neki procenat obrade koju vrši tvoj proces i da taj procenat prestaviš npr. nekim loaderom u aplikaciji na ovaj način ne možeš.
[ Mihajlo Cvetanović @ 29.12.2009. 07:25 ] @
Nisam nikad radio redirekciju, pa ne znam detalje. Moguće da ne može da radi u paraleli, Windows nije Linux. Ako ne možeš da spucaš sve podatke na input, pa onda natenane da čitaš output, možda možeš nekako da čitaš stvari direktno sa ekrana.
[ tkaranovic @ 29.12.2009. 16:37 ] @
Može da se korisiti i WM_CopyData.

sample

Primer za Delphi ovde na ES-u
[ Mihajlo Cvetanović @ 29.12.2009. 17:17 ] @
WM_COPYDATA OP-u ne radi posao, jer konzolne aplikacije koje on hoće da pozove nemaju handler za tu poruku (niti za bilo koju drugu WM poruku). Čovek može samo da koristi gotove konzolne aplikacije, ali ne može i da ih menja. Piše u prvoj poruci.
[ tkaranovic @ 30.12.2009. 06:36 ] @
Citat:
Mihajlo Cvetanović
WM_COPYDATA OP-u ne radi posao, jer konzolne aplikacije koje on hoće da pozove nemaju handler za tu poruku (niti za bilo koju drugu WM poruku). Čovek može samo da koristi gotove konzolne aplikacije, ali ne može i da ih menja. Piše u prvoj poruci.


Evo šta piše u prvoj poruci:

Citat:
dalibor_zdravkovic:
 Na netu ima dosta dobrih besplatnih video i audio konvertera ali su odrađeni samo kao konzole aplikacije, cak im je dostupan i njihov izvorni kod kojeg mozete modifikovati po sopstvenoj želji, a zatim ga kompajlirati za određeni operativni sistem bilo linux ili windows, ili se pak mogu skinuti gotovi bildovi za određeni OS.
Npr.: Lame MP3, FLAC, FFMpeg itd.

Zelo bih da kreiram MFC aplikaciju koja bi stajala kao GUI (graficki korisnicki interfejs) između korisnika i date kozola aplikacije pa mi je neophodan neki tutorijal koji bi mi objasnio na koji način da u okviru MFC plikacije pozovem EXE koji vrsi konverziju prosledim mu parametre i prihvatam informacije koje taj EXE vraca npr. procenat izvrsene konverzije, formate konverzije itd.



Crveno sam obojio deo koji govori da može da menja konzolnu aplikaciju. To znači da može da doda ovako nešto kao što je primer koji je uz poruku. Primer ispisuje WM_CPOYDATA u konzoli kada primi tu poruku, koju sam sebi pošalje. Primer sam pripremio sa C++Builder 2010.
[ Mihajlo Cvetanović @ 30.12.2009. 07:45 ] @
Ups, u pravu si! U trendu pažljivijeg čitanja sledi i jedno pitanje. Dalibore, gde si ti to video da čitanje u parentu ne može zajedno s pisanjem? Šta ako ipak može?
[ VladimirCDT @ 30.12.2009. 11:19 ] @
Ako je Dalibor spreman da ulazi u source code, onda moze vrlo jednostavno (pretpostavljam) da nakaci GUI na ostatak i da sve iskompajlira kao jednu aplikaciju, bez potrebe da jedan proces kreira drugi i da medjusobno komuniciraju.

Ne bi me cudilo da to (jedna aplikacija) bude jednostavnije resenje nego zezanje sa dva procesa. I jedno i drugo resenje bi imali svoje za i protiv, naravno.
[ dalibor_zdravkovic @ 30.12.2009. 12:25 ] @
Citat:
Mihajlo Cvetanović: Ups, u pravu si! U trendu pažljivijeg čitanja sledi i jedno pitanje. Dalibore, gde si ti to video da čitanje u parentu ne može zajedno s pisanjem? Šta ako ipak može?


Na: Creating a Child Process with Redirected Input and Output

Deo:
Code:
void ReadFromPipe(void) 

// Read output from the child process's pipe for STDOUT
// and write to the parent process's pipe for STDOUT. 
// Stop when there is no more data. 

   DWORD dwRead, dwWritten; 
   CHAR chBuf[BUFSIZE]; 
   BOOL bSuccess = FALSE;
   HANDLE hParentStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

----->// Close the write end of the pipe before reading from the         <-----
----->// read end of the pipe, to control child process execution.        <-----
----->// The pipe is assumed to have enough buffer space to hold the <-----
----->// data the child process has already written to it.                   <-----
 
   if (!CloseHandle(g_hChildStd_OUT_Wr)) 
      ErrorExit(TEXT("StdOutWr CloseHandle")); 
 
   for (;;) 
   { 
      bSuccess = ReadFile( g_hChildStd_OUT_Rd, chBuf, BUFSIZE, &dwRead, NULL);
      if( ! bSuccess || dwRead == 0 ) break; 

      bSuccess = WriteFile(hParentStdOut, chBuf, 
                           dwRead, &dwWritten, NULL);
      if (! bSuccess ) break; 
   } 
}


E sad, možda i može istovremeno, ovde kaže da ne, nisam probao.
Razlog sašto ne koristim već gotov source code: jer ne mogu da gubim dane proučavajući ga. Jednostavno uz kompajliran kod ide i DOC u kome ima svih imformacija vezanih za ulazne parametre, koji nije baš mali i zahteva dosta vremena za proučavanje. I nakon toga, mislim da je mnogo brže kreirati gui, koji kreira proces, prosleđuje parametre tom procesu i rezultate predaje korisniku, nego celokupni izvorni kod proučavati, modifikovati, smeštati u dll-ove, a zatim krerati gui aplikaciju koja poziva funkcije iz dll-ova za obradu.
[ Mihajlo Cvetanović @ 30.12.2009. 12:51 ] @
Mislim da je to samo takav primer. Pokušaj se malo poigrati :-)