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;