Ich habe eine Win32-Anwendung, die ich mache, und es sendet eine Zeichenfolge von einem Prozess zu einem anderen über eine Named Pipe. Der Prozess, der ReadFile für die Pipe aufruft, ruft jedoch die Zeichenfolge mit einigen verstümmelten Daten darin ab. Es gibt die Anzahl der korrekt geschriebenen Bytes zurück, aber die letzten 8 Zeichen des Strings sind verstümmelt.Wie kann man verstümmelten Text mit WriteFile auf einer Pipe reparieren?
Hier ist der Code für das Rohr zu schaffen und zu schreiben, um es:
myPipe = CreateNamedPipe(L"\\\\.\\pipe\\testpipe", PIPE_ACCESS_OUTBOUND, PIPE_NOWAIT, 10, 512, 512, 10, NULL);
TCHAR title[128];
GetWindowText(foundHwnd, title, 128);
wstring windowTitle(title);
vector<wstring> splitVec;
boost::split(splitVec, windowTitle, boost::algorithm::is_any_of(wstring(L"|")));
WriteFile(myPipe, splitVec[0].c_str(), splitVec[0].size(), &wrote, NULL);
Und hier ist der Code, der es liest:
if (WaitNamedPipe(L"\\\\.\\pipe\\testpipe", 5000) == 0) {
MessageBox(NULL, L"Unable to wait for pipe", L"Error", MB_OK);
return false;
}
myPipe = CreateFile(L"\\\\.\\pipe\\testpipe", GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (myPipe == INVALID_HANDLE_VALUE) {
MessageBox(NULL, L"Unable to open pipe", L"Error", MB_OK);
return false;
}
// Other code here...
TCHAR buf[512];
DWORD read;
success = ReadFile(myPipe, buf, 512, &read, NULL);
if (read > 0)
MessageBox(NULL, buf, L"Got Data", MB_OK);
Wenn MessageBox das Ende der gezeigt wird, String ist verstümmelt und ich habe keine Ahnung warum. Irgendwelche Ideen?
Danke!
Danke! Ich hatte jetzt ein Problem mit der Hälfte der gesendeten Zeichenfolge. Ich brauchte die (lstrlen (..) + 1) * sizeof (TCHAR), wie im Beispiel gezeigt. – staackuser2
Ah, ja. Multibyte-Zeichen. Daran habe ich nicht einmal gedacht. – tvanfosson
good catch, ich habe meine Antwort aktualisiert und sie mit * sizeof (TCHAR) –