Auslesen von Mailslots im Debug-Mode



  • Frohes Fest! :xmas1:

    Ich hab ein kleines Problem mit dem Auslesen von Mailslots im Debug-Mode. Es steht zwar drin was ich reingeschrieben habe, aber es wird immer noch etwas mehr ausgelesen. Angenommen der Client schreibt die Nachricht "Dies ist ein Test" in den Mailslot, dann liest ReadFile "Dies ist ein Test<<<<<<<<<<<<<<§$" oder etwas ähnliches aus dem Mailslot, obwohl in nextMessageSize eigentlich die korrekte Grösse des Strings gespeichert ist und der Buffer entsprechend dimensioniert ist. Der Fehler tritt wie gesagt nur im Debug-Mode auf.

    int MailslotServer::readOneMessage(std::string& message)
    {
    	int retVal = 0;
    	if (isOpen()) {
    		DWORD messageCount = 0, nextMessageSize=0;
    		if (::GetMailslotInfo(_mailSlot, (LPDWORD)NULL, &nextMessageSize, &messageCount, (LPDWORD)NULL)) {
    			if (messageCount > 0) {
    				LPSTR buffer = (LPSTR)::GlobalAlloc(GPTR, nextMessageSize);
    				DWORD bytesRead = 0;
    				if (::ReadFile(_mailSlot, buffer, nextMessageSize, &bytesRead, (LPOVERLAPPED)NULL)) {
    					message = buffer;
    					// message = message.substr(0, nextMessageSize);
    					retVal = 1;
    				}
    				::GlobalFree(buffer);
    			}
    		}
    	}
    	return retVal;
    }
    

    Die auskommentierte Zeile ist mein Workaround, aber das kann es irgendwie nicht sein.

    Hat jemand eine Idee?



  • Harrison Bergeron schrieb:

    , obwohl in nextMessageSize eigentlich die korrekte Grösse des Strings gespeichert ist

    Die korrekte Größe ohne die Null-Terminierung, die sendest Du nicht mit. Mach den Buffer ein Zeichen größer und terminiere den String empfängerseitig von Hand.



  • Ah, danke für den Hinweis!


Anmelden zum Antworten