【发布时间】:2017-04-02 07:14:56
【问题描述】:
我是 Android 世界的新手
然后我跑到下一个场景
我创建了这段代码
//function
procedure LoadPictureFromResource(const ResName: string; out aImage: TImage);
var
aResource: TResourceStream;
begin
aResource := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
try
aImage.Bitmap.LoadFromStream(aResource);
finally
aResource.DisposeOf;
end;
end;
....
//call function
FImage := TImage.Create(Self);
FImage.Parent := Self;
FImage.Align := TAlignLayout.Left;
FImage.Margins.Left := 6;
FImage.Margins.Top := 3;
FImage.Margins.Bottom := 3;
FImage.Margins.Right := 3;
FImage.Width := 64;
LoadPictureFromResource(resPicturesError, FImage);
显然在过程的声明参数中有错误
用 var 或 const 或 empty
适用于 Windows,但语法/逻辑仍然错误
Android调试模式——Delphi报错(设备无响应,运行正常)Segmentation fault(11)
工作模式 - Delphi 和设备不报告任何内容
Android 不报告任何内容(错误很危险) - 为什么?
【问题讨论】:
-
对 DisposeOf 的调用毫无意义。 out 参数错误,应该是普通的按值传递。
-
不,它与 windows 版本使用的代码不同,我知道这是错误的,问题不同
-
为 ARC 和非 ARC 编写代码是多么乏味。我没有意识到这一点。无论如何,out是错误的。去掉它。您传入对现有实例的引用。