Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

Re: Bilder aus einer externen Datei laden

  Alt 1. Dez 2009, 16:04
b.Free gibt übrigens dein Bitmap frei und der Wert in Result wäre somit ungültig/fehlerhaft

und bei einem fehler wärend der Restelltung des Bitmaps und des Resourcestreams, wäre die DLL nicht wieder entladen wurden.

und da du anscheinend Indize in der RES verwendest, würden sich diese auch beim Laden gut machen
Delphi-Quellcode:
function GetCard(CardIndex: Integer): TBitmap;
  var
    h: THandle;
    r: TResourceStream;
  begin
    h := LoadLibrary('CardsDLL.dll');
    if h <> 0 then
      try
        r := TResourceStream.CreateFromID(h, CardIndex, 'Bitmap');
        result := TBitmap.Create;
        try
          result.LoadFromStream(r);
        finally
          r.Free;
        end;
      finally
        FreeLibrary(h);
      end;
    else
      RaiseLastOSError;
  end;
Da Objekte als Result oftmals als genzwertig böse angesehn werden, könnte man es auch so machen
Delphi-Quellcode:
procedure GetCard(CardIndex: Integer; Var Bitmap: TBitmap);
  var
    h: THandle;
    r: TStream;
  begin
    h := LoadLibrary('CardsDLL.dll');
    if h <> 0 then
      try
        r := TResourceStream.CreateFromID(h, CardIndex, 'Bitmap');
        try
          if not Assigned(Bitmap) then
            Bitmap := TBitmap.Create;
          Bitmap.LoadFromStream(r);
        finally
          r.Free;
        end;
      finally
        FreeLibrary(h);
      end;
    else
      RaiseLastOSError;
  end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat