delphi - 如何从 DLL 内部访问 DLL 中的图像?
问题描述
在 Delphi 10.4 中,在 COM Server DLL ShellExtension 项目中,我向项目中添加了一个并在 DataModule 上DataModule
放置了一个。TImageList
ImageList 包含在设计时添加的几个图像。现在,从DLL
项目的主单元,我尝试访问 ImageList 中的图像:
procedure TMyShellExtension2.MyGetBitmap(ABitmap: Vcl.Graphics.TBitmap);
begin
ABitmap.PixelFormat := pf24bit;
ABitmap.Width := 128;
ABitmap.Height := 128;
DataModule.DataModule3.ilUrlPics.GetBitmap(0, ABitmap);
CodeSite.Send('test');
end;
该GetBitmap
行似乎导致错误,因为CodeSite.Send
未执行以下行并且未分配图像。
显然,我从TImageList
aDataModule
内部 a访问图像的方式DLL
是不正确的。
另一方面,在分配“自制”位图时,它确实有效:
ABitmap.PixelFormat := pf24bit;
ABitmap.Width := 128;
ABitmap.Height := 128;
ABitmap.Canvas.Brush.Color := clBlue;
ABitmap.Canvas.FillRect(Rect(0, 0, 127, 127));
是否有另一种访问内部图像的工作方式DLL
?我究竟做错了什么?
解决方案
正如这个问题中的几位评论员所指出的那样,并且正如我自己所经历的那样,在 DLL 中使用资源作为图像源是一种比“在 aTImageList
上使用 a TDataModule
”更好的方法,后者必须在 DLL 的入口点显式实例化(如 @ RemyLebeau 指出)。
因此,在这种特定情况下,我:
• 将所需图像作为位图存储在Project → Resources and Images
.
• 确保加载创建的资源,例如使用{$R MyShellExtensionDLL.res}
.
• 在运行时加载位图,例如:
procedure MyGetBitmap(ABitmap: Vcl.Graphics.TBitmap);
begin
ABitmap.PixelFormat := pf24bit;
ABitmap.Width := 128;
ABitmap.Height := 128;
ABitmap.LoadFromResourceName(HInstance,'BITMAP1');
end;
推荐阅读
- javascript - Telegram bot api 无法在 24 小时内限制用户
- performance - 在输出发生时间的同时有效地使用 iris 来组合 iris.analysis&aggregated
- ruby - 根据与 Filterrific 的关联更新过滤器
- javascript - 添加正斜杠时HTML主题jQuery中断
- oracle - Oracle PL/SQL 级联触发器删除未按预期工作
- ios - 如何从 iOS 的 Health Kit 中实时获取附近的心率数据?
- parallel-processing - 如何在 Windows 中使用 CUDA 的协作组功能
- php - 为什么我的 IntlDateFormatter 格式错误?
- r - TOML 表的 blogdown 缩进 - 特别是默认的 config.toml 文件
- php - Symfony 如何使用 LexicJWT 在 EventSubscriber 中获取用户