Windows Pipes



  • Hallo,

    Ich habe eine Problem mit den Windows Pipes. Zuerst einmal der relevante Sourcecode:

    typedef struct pipeClient
    {
        char* name;
        DWORD size;
        HANDLE hPipe;
    }pipe;
    
    BOOL ConnectToPipeServer( pipe* pClient )
    {
        while( TRUE )
        {
            pClient->hPipe = CreateFile( pClient->name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
            if( pClient->hPipe != INVALID_HANDLE_VALUE )
                break;
    
            if( GetLastError() != ERROR_PIPE_BUSY )
                return FALSE;
    
            if ( ! WaitNamedPipe( pClient->name, 5000))
                return FALSE;
        }
        DWORD dwMode = PIPE_READMODE_MESSAGE;
        if( ! SetNamedPipeHandleState( pClient->hPipe, &dwMode, NULL, NULL ) )
            return FALSE;
    
        return TRUE;
    }
    
    DWORD PipeSend( HANDLE hPipe, char* strSend, DWORD size )
    {
        DWORD dwWritten = 0;
        if( ! WriteFile( hPipe, strSend, size, &dwWritten, NULL ) )
            return 0;
    
        return dwWritten;
    }
    
    DWORD PipeRecv( HANDLE hPipe, char* pStr, DWORD max )
    {
        char buffer[max];
        ZeroMemory( buffer, max );
        DWORD dwRead;
        if( ! ReadFile( hPipe, buffer, max*sizeof( char ), &dwRead, NULL ) )
            return 0;
    
        strcpy( pStr, buffer );
    
        return dwRead;
    }
    
    //Pseudo Funktion!
    void ieine Funktion()
    {
        pipe client;
        client.name = "\\\\.\\pipe\\pipetoengine";
        client.size = 512;
    
        if( ! ConnectToPipeServer( &client ) )
        {
            OutputDebugStr( "ConnectToPipeServer failed" );
            return 1;
        }
        PipeSend( client.hPipe, "ready", strlen( "ready" ) );
    
        char buffer[512];
        ZeroMemory( buffer, 512 );
        PipeRecv( client.hPipe, buffer, 512 );
        OutputDebugStr( "OKE" );
    }
    

    Dass der Quellcode etwas wirr aussieht liegt daran, dass ich schon sehr viel selber daran rumgebastelt habe, bevor ich hier mal mein Glück versuche. Das Problem ist folgendes:
    Es läuft in der Pseudofunktion alles Glatt, bis ich mittels PipeRecv() eine Nachricht vom Server auslesen möchte. Dann stürzt mein Programm immer ab (Windows7 32bit: Das Programm muss beendet werden..). Ich habe null Ahnung, wieso das Programm immer wieder abstürzt. Ich hoffe mir kann jemand helfen.. Das Senden klappt nämlich einwandfrei und vor einigen Tagen hatte die Empfang-Funktion eigentlich auch noch funktioniert 😕 Aber urplötzlich motzt es rum..
    Achja, ich programmiere in C, und nicht in C++.

    Freu mich über jede Hilfe.



  • Debuggen?


Anmelden zum Antworten