HBITMAP als Parameter und return- wert
-
@Mods : Nicht zu WinAPI schieben, da ich eine Lösung brauche, die mit BCB geht!
Hallo Graphik- Freaks.
Ich habe folgendes Problem.:In einer DLL brauche ich eine Funktion
HBITMAP Execute(HBITMAP ABitmap) { HBITMAP RetBM; //BM ist ein TBitmap- Objekt, welches vorher (irgendwo) erzeugt wurde //und spaeter (irgendwo) gelösch wird BM->Handle=ABitmap; ... //Hier wird das BM verändert return RetBM; }Jetzt hab ich zwei Probleme:
1.
Die Änderungen, die in BM gemacht werden, sollen nicht auf das übergebene ABitmap zurückwirken.
Nach rückkehr der Funktion ist aber das Original- Bitmap ungültig.
Wie kann das verhindert werden?
2.
Ich muss eine Kopie des geänderten Inhaltes von BM als HBITMAP treturnen?
Kann mir einer sagen wie ich an so eine Kopie komme?
return(BM->Handle);
geht nicht das ist ungültig, da BM ja gelöscht wird.
-
Ich hab die Lösung:
HBITMAP Execute(HBITMAP ABitmap) { HBITMAP RetBM; Graphics::TBitmap *TempBM=new Graphics::TBitmap(); TempBM->Handle=ABitmap; //BM ist ein TBitmap- Objekt, welches vorher (irgendwo) erzeugt wurde //und spaeter (irgendwo) gelösch wird BM->Assign(TempBM); //DIE FOLGENDEN 2 ZEILEN SIND IN REIHENFOLGE KORRIGIERT NACH SUNDAY!!! ABitmap=TempBM->ReleaseHandle(); delete TempBM; ... //Hier wird das BM verändert RetBM=BM->ReleaseHandle(); return RetBM; }
-
das duerfte aber in die hose gehen:
delete TempBM; ABitmap=TempBM->ReleaseHandle();
-
Hallo Sunday,
Ist klar die 2 Zeilen sind genau andersrum!
Sonst gäbe es wohl ein ernstes Problem.