Проблема в том, что вы уничтожаете возвращаемое изображение. Важно понимать, что классы являются ссылочными типами в Delphi. Таким образом, после присвоения Result
в вашем коде у вас все еще остается только один экземпляр, но две ссылки на этот же единственный экземпляр.
Вам необходимо удалить вызов на Free
.
function LoadImageResource(Module: NativeUInt; const ResName: string): TWICImage;
var
Strm: TResourceStream;
begin
Strm := TResourceStream.Create(Module, ResName, RT_RCDATA);
try
Result := TWICImage.Create;
Result.LoadFromStream(Strm);
finally
Strm.Free;
end;
end;
Чтобы сделать исключение функции безопасным, требуется небольшая настройка:
function LoadImageResource(Module: NativeUInt; const ResName: string): TWICImage;
var
Strm: TResourceStream;
begin
Strm := TResourceStream.Create(Module, ResName, RT_RCDATA);
try
Result := TWICImage.Create;
try
Result.LoadFromStream(Strm);
except
Result.Free;
raise;
end;
finally
Strm.Free;
end;
end;
При вызове функция ведет себя как конструктор. Это либо успешно, и возвращает новый экземпляр, передавая право собственности вызывающей стороне. Или это вызывает исключение. Соответственно я бы назвал функцию CreateImageFromResource
.