Probleme beim Lesen von IStream
-
Wer schreibt denn in den Stream?
-
Die main methode, aus einer Klasse rufe ich eine Methode auf die einen zeiger auf IStream zurückt gibt hier "is". der is zeiger ist aufjeden fall ok.(Getestet).
-
Dann zeig mal wie du Write aufrufst.
-
schrieb:
Dann zeig mal wie du Write aufrufst.
gar nicht, im stream wird ein Bitmap gespeichert.
die Methode in der Klasse :
.....
.....
..
IStream *speicher;
......
......Bitmap *bitmap = Bitmap:: ................
bitmap->Save(speicher,....);
return speicher;
-----------------------
Das läuft alles automatisch in der Klasse, die Methode gibt mir nur einen zeiger auf ein IStream zurück.IStream *is = meinObject.GetBitmap();
wie schon gesagt der "is" ist ok das geht auch alles glad.
nur jetzt will ich aus dem IStream lesen, und da ist das Problem
is->Read(........);
Ich vermute dass die Parameter von Read falsch sind.
-
Wird zwischen
IStream *speicher;
und
bitmap->Save(speicher,....);
noch irgendwas mit "speicher" gemacht? Wenn nicht ist es ja wohl sehr klar das es nicht funktioniert.

-
Ja natürlich :
.....
.....
.....//Speicher für IStream allocieren
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE,1024);
CreateStreamOnHGLOBAL(hGlobal,TRUE,&is);
.....
....und dann bitmap->Save(is,.....);
-
sorry name verwechselt
an dieser stelle heist der IStream nicht "is" sondern "speicher".
also IStream *speicher.
-
Hier findest du ein funktionierendes Beispiel: http://www.codeproject.com/KB/GDI-plus/MemImage.aspx
Mit dessen Hilfe müsstest du doch eigentlich den Fehler finden können.
-
So habs mir selbst mal angeguckt, ich denke mal in deinem Code fehlt der Seek-Aufruf mit dem man an den Anfang springt.
-
Genau das war das Problem : "Seek" fehlt bei mir.

also so wird aus einem IStream gelesen.
//ich bekomme einen Zeiger auf einen IStream von einer methode
IStrem* is = myobejct.getDataIStream();Variablen für die Größe definiern :
ULARGE_INTEGER size;
LARGE_INTEGER myoffset;
myoffset.QuadPart = 0;//JETZT WICHTIG mit Seek die Pointer setzen! Mein Hauptproblem!
//größe bestimmen
is->Seek(myoffset,STREAM_SEEK_END,&size);
//und jetzt wieder an den Anfang springen
is->Seek(myoffset,STREAM_SEEK_SET,NULL);//Char Array erzeugen mit entsprechender Größe
char *mybuffer = new char[size.QuadPart];//Aus dem Stream lesen
ULONG readBytes;
is->Read(mybuffer,size.QuadPart,&readBytes);:p :p :p
Vielen Dank für die Hilfe.
Danke für den Link.