Mit folgendem Code wandele ich meinen Byte-Array mit einem Bild drin in ein gdi+ objekt um:
|
Quellcode
|
1
2
3
4
5
6
7
|
Dim iImageStream As IUnknown, Ptr_GdipImage As Long
If (CreateStreamOnHGlobal(VarPtr(mybuff(0)), 0, iImageStream) = 0) Then
If (GdipLoadImageFromStream(iImageStream, Ptr_GdipImage) <> 0) Then
MsgBox "Couldn't GdipLoadImageFromStream!"
End If
Set iImageStream = Nothing
End If
|
Das ganze steht in einer Klasse, die jeweils ein Bild im Speicher halten soll. Wenn ich jetzt 10 verschiedene Bilder so geladen habe in verschiedenen instanzen der Klasse, dann hat Ptr_GdipImage immer den selben Wert!? Das ist doch der Pointer, der auf die Stelle im Ram zeigt, wo das Bild liegt? Also MUSS Ptr_GdipImage sich doch ändern!?
Wenn ich den "Set iImageStream = Nothing" nicht ausführen lasse, dann müssten die "IStreams" (was immer das auch ist) doch im ram bleiben? Tun sie aber nicht! Ich lege Objekte an, ohne sie zu löschen und sie löschen sich praktisch selber!?