【发布时间】:2020-08-08 16:42:43
【问题描述】:
在 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 行没有被执行并且图像没有被分配。
显然,我从DataModule 上的TImageList 访问图像的方式是不正确的。
另一方面,当分配“自制”位图时,它确实有效:
ABitmap.PixelFormat := pf24bit;
ABitmap.Width := 128;
ABitmap.Height := 128;
ABitmap.Canvas.Brush.Color := clBlue;
ABitmap.Canvas.FillRect(Rect(0, 0, 127, 127));
还有另一种访问DLL 内图像的工作方式吗?我做错了什么?
【问题讨论】:
-
@user1580348 因为 DLL 项目在其入口点中没有启动代码来在运行时创建设计时对象,就像 Form GUI 项目那样。因此,您必须自己显式创建
TDataModule对象。 -
这实际上可能是一个更好的方法;否则,可能雷米的话是正确的。
-
@user1580348 不,我的意思是在 DLL 的 入口点(项目主源文件的
begin..end.块,或在DllProc回调中)。此外,units 没有事件,classes 有。但是,在 DLL 中,使用资源是比在TDataModule上使用TImageList更好的解决方案。 -
我给了你一个 +1 作为“补偿”。 :)
-
@AndreasRejbrand 感谢您对我的回答的编辑和对 Alt 文本的解释。我将来会使用它。也感谢您的帮助!我从你身上学到了很多。而且你是一个非常友好和建设性的人!
标签: delphi dll datamodule timagelist delphi-10.4-sydney