Ich komme mit den Pipes nicht weiter. Hab bisher folgenden Code:
void CPicUpControlDlg:nCreateBinFile()
{
const int cBuffer = 255; // Buffergroesse der Pipe
HANDLE hRead = NULL; //HANDLE zum Lesen
HANDLE hWrite= NULL; // Handle zum Schreiben
//unsigned long nThreadID;
SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa,sizeof(SECURITY_ATTRIBUTES));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = true;
sa.bInheritHandle = NULL;
/****************************************************************************
********************** Erzeugen der Pipe **********************************
****************************************************************************/
BOOL fCreated = CreatePipe (&hRead, &hWrite, &sa, 0);
if( !fCreated )
MessageBox(„Fehler beim Erstellen der Pipe“);
else
MessageBox(„Pipe wurde erstellt“);
/****************************************************************************
********** Prozess starten ************************************************
****************************************************************************/
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
// stdin, stdout und stderr des Kindes in STARTUPINFO eintragen
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.hStdInput = hRead;
si.hStdOutput = hWrite;
si.hStdError = hWrite;
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
GetStartupInfo(&si);
//Den Pfad des zu startenden DOS- Programmes aus der Textfeldvar.
//in ein char[] umwandeln
char* pszString = new char[m_sPathToPicUp.GetLength() + 1];
strcpy( pszString, m_sPathToPicUp );
CreateProcess(pszString,NULL,// Name of app to launch --> oder NULL,pszString
NULL, // Default process security attributes
NULL, // Default thread security attributes
TRUE, // inherit handles from the parent
0, // Normal priority
NULL, // Use the same environment as the parent
NULL, // Launch in the current directory
&si, // Startup Information
&pi); // Process information stored upon return
/****************************************************************************
************** In die Pipe schreiben **************************************
****************************************************************************/
//TCHAR Msg[cBuffer];
CString Msg = „Test“;
DWORD dwWritten;
BOOL fWritten = WriteFile (hWrite, // schreiben in die Pipe
Msg,
sizeof(Msg),
&dwWritten,
NULL );
Erreichen möchte ich mit dem Programm, dass mein Windowsprogramm z.B. die Konsole(cmd.exe) startet und einfach den String „Test“ hinters promt schreibt.
Weis jemand, was mir noch fehlt oder was ich falsch mache?
gruss
ziba