Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » CreateProcess + CreatePipe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.08.2004, 15:18 Uhr
Tacco



Hallo,

ich möchte die ausgabe der Konsole umlenken um von einem Konsolenprogramm die ausgabe zu bekommen.

das was ich bis jetzt gemacht habe stürtzt aber ab.
C/C++ Code:

C++:
HANDLE hInput,hOutput;
STARTUPINFO startUp;
PROCESS_INFORMATION process;

memset(&startUp,0,sizeof(STARTUPINFO));
memset(&process,0,sizeof(PROCESS_INFORMATION));

CreatePipe(&hInput,&hOutput, NULL, 0);


startUp.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startUp.hStdOutput = hOutput;
startUp.hStdError = GetStdHandle(STD_ERROR_HANDLE);

//in com ist das programm mit parametern angegeben
CreateProcess(NULL,com, NULL, NULL, true, CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, NULL,NULL,&startUp,&process);
WaitForSingleObject(process.hProcess, 500);
char buff[255];
memset(buff,0,255);
DWORD readed;
ReadFile(hInput,buff,255,&readed,NULL); //heir bleibt er stechen  



vileicht weiss jemat wieso oder kent eine andere lösung.

MFG Tacco

Dieser Post wurde am 27.08.2004 um 23:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.08.2004, 23:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, du definierst zwar den Output des neuen Prozesses als "hOutput", jedoch liesst du dann von hInput. Vll ist das dein einziger Fehler
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.08.2004, 23:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


achja, und du musst


C++:
startUp.dwFlags = STARTF_USESTDHANDLES;



angeben
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.08.2004, 08:50 Uhr
Tacco



Danke, ich habe das so abgeendert aber ich bekomme noch nichts zurük?

kann das daran ligen das ich fersuche das in MFC umzusetzen?


C++:
    command=m_geotools+"\\geoTools AlkPostProc "+m_INI+" rowTag="+m_TAG+" MasterFolder="
            +m_mFld+" InputFolder="+m_iFld+"\\erst delFile= makeMain="+t1+
            " makeArrows="+t2+" makeAnnos="+t3+" flst_besch="+t4+" geb_hnr="+t5+" geb="+t6+
            "flach="+t7+" flst="+t8+" lin="+t9+" punkte="+t10+" text="+t11+" annoJustify="
            +annoj;    
        wsprintf(com,"%s",command);
        m_ausg="";

    HANDLE hInput,hOutput;
    STARTUPINFO            startUp;
    PROCESS_INFORMATION process;

    memset(&startUp,0,sizeof(STARTUPINFO));
    memset(&process,0,sizeof(PROCESS_INFORMATION));
    
    CreatePipe(&hInput,&hOutput, NULL, 0);


    startUp.hStdInput    = GetStdHandle(STD_INPUT_HANDLE);
    startUp.hStdOutput    = hOutput;
    startUp.hStdError    = GetStdHandle(STD_ERROR_HANDLE);
    startUp.dwFlags = STARTF_USESTDHANDLES;
    CreateProcess(NULL,com, NULL, NULL, true,
                  CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE,
                  NULL,NULL,&startUp,&process);
    WaitForSingleObject(process.hProcess, 500);
    char buff[255];
    memset(buff,0,255);
    DWORD readed;
    ReadFile(hOutput,buff,255,&readed,NULL);
    m_ausg.Format("%s",buff);
    UpdateData(FALSE);



ich bekomme nur einen leeren string zurüg.
der aufruf sollte eine antwort bringen.

MFG Tacco
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.08.2004, 09:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das kannst du relativ einfach testen:

geh mal in eine dosbox und gib dann deinen command ein, ob er eine ausgabe liefert.
Evtl versuchst du zu früh da drin was zu lesen, also das die 500ms nicht reichen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.08.2004, 10:24 Uhr
Tacco



ich habe das auf zu rufende Programm schon mal ohne Parameter auf ge rufen da kommt die über sicht der Parameter. Das habe ich auf der konsole und in mien Programm ausprobirt. Auf der konslole kommt die ausgabe aber nicht im Programm.

Ich habe festgestelt das die Funktion ReadFile() 0 zurükgibt also list der garnicht?

Wegen der lesezeit ich habe es mit 1000 und 10000 getestet aber keine wirkung.

MFG Tacco
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: