Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » simples ausgeben eines buffers?

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
22.09.2010, 22:23 Uhr
Pain12345



hey leute,
ich habe ein mehr oder weniger großes problem. Ich versuche von .net an eine c++ dll über eine named pipe mehrere werte zu übertragen. In c# wird alles korrekt versendet. In c++ erhalte ich jedoch mekwürdige hyroglyphen. Der folgende code liest den teil aus den ich per c# über die pipe sende.


C++:
fSuccess = ReadFile(
         hPipe,    // pipe handle
         chBuf,    // buffer to receive reply
         BUFSIZE*sizeof(TCHAR),  // size of buffer
         &cbRead,  // number of bytes read
         NULL);    // not overlapped



nun möchte ich gerne den inhalt der mir gesendet wurde auslesen. Doch hier hackt es? Wie kann ich den inhalt aus meinem buffer in einer Message Box ausgeben?
wenn ich das so versuche:


C++:
MessageBox(0, chBuf, L" Whohoo", 0);


bekomme ich in der message box nur hyroglyphen ausgegeben. zb:


Zitat von Verfasser:

扡챣쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌쳌䄬柿쳌쳌쳌쳌Ӝ




es wäre super wenn jemand rat wüsste
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.09.2010, 16:14 Uhr
TOSHMAX



Hast du schon mal den Rückgabewert von ReadFile überprüft und cbRead mit der Größe des Buffers verglichen?

Zusätzlich kannst du noch GetLastError befragen.
Das sollte dich dem Fehler näher bringen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.09.2010, 18:22 Uhr
0xdeadbeef
Gott
(Operator)


Du hast "abc" verschickt, richtig?

Meine Vermutung ist, dass von .net UTF-8 o.ä. in die Pipe geschrieben wird, du aber UTF-16 daraus liest. Das wäre im obrigen Beispiel der Fall, wenn _UNICODE definiert bzw. TCHAR = wchar_t ist. In dem Fall würde der Buffer mit "abc" gefüllt, und dahinter wäre jede Menge uninitialisierter Speicher - im Debug-Modus von MSVC also 0xCC. Wenn du jetzt eine Unicode-Zeichentabelle befragst, wirst du feststellen, dass das auf einem Little-Endian-System genau dem Kram von oben entspricht.

Die einfachste Lösung wird sein, in den Projekteinstellungen statt Unicode Multibyte einzustellen.

Die Problematik ist übrigens MSVC-spezifisch; ich schiebe dich also mal rüber ins WinAPI-Forum.

-->
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 23.09.2010 um 18:23 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.09.2010, 23:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


und man sollte den puffer auch terminieren. readfile liefert dir die anzahl der gelesenen bytes, d.h:


C++:
chBuf[cbRead] = '\0';



vor dem darstellen der nachricht. du kannst die WideCharToMultibyte (oder wie die funktionen nochma genau heißen) benutzen um deinen utf-8/ASCII c#-stream in dein unicode aka utf-16 format zu bringen.
--
class God : public ChuckNorris { };
 
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: