【问题标题】:no raising error in android 4.4.2在 android 4.4.2 中没有引发错误
【发布时间】: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是错误的。去掉它。您传入对现有实例的引用。

标签: android delphi


【解决方案1】:

资源文件仅支持桌面平台,详情请看文档:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Resource_Files_Support

如果您想在 Delphi 中将文件添加到移动项目中,请按照博客中提供的说明进行操作:https://community.embarcadero.com/article/articles-tutorials/151-ui/927-deploying-and-accessing-local-files-on-ios-and-android

请注意,iOS 和 Android 的路径不同 - 您可以在部署窗口中输入它们,每个平台都有单独的设置。

【讨论】:

  • 不正确,RT_RCDATA类型可以使用资源。
  • 嗯...我已经指出了官方文档,其中包含移动设备的特殊部分(博客条目重复了相同的解决方案)。在 system.pas 中实现了 FindResource 的多平台版本,但文档明确建议避免使用它。
  • 我在这里找到了这个解决方案stackoverflow.com/questions/21291706/…
  • 我也找到了这个...但是你为什么不直接使用肯定有效的方法(即通过部署)? iOS 和 Android 的路径不同,但您可以设置一次并在两个平台上使用完全相同的代码。如果文档说某些东西不起作用,那么强制使用这种方法会变得有点小技巧,你会发现它在 RAD Studio 的下一个版本中毫无用处。
  • 听不懂:(你能详细说明你的意思吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2016-11-30
相关资源
最近更新 更多