如何从DLL内部访问DLL内部的图像



在Delphi10.4中,在COM服务器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行没有被执行,图像也没有被分配。

显然,我在DLL内部从DataModule上的TImageList访问图像的方式是不正确的。

另一方面,当分配一个";自制的";BitMap,它确实有效

ABitmap.PixelFormat := pf24bit;
ABitmap.Width := 128;
ABitmap.Height := 128;
ABitmap.Canvas.Brush.Color := clBlue;
ABitmap.Canvas.FillRect(Rect(0, 0, 127, 127));

是否有其他访问DLL内部图像的工作方式?我做错了什么?

正如这个问题中的几位评论员所指出的,正如我自己所经历的,在DLL中使用资源作为图像源是一种比"在CCD_ 11〃上使用CCD_;它必须在DLL的入口点中显式实例化(正如@RemyLebeau所指出的(。

因此,在这个特定的情况下,I:

•将所需图像作为位图存储在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;  

相关内容

  • 没有找到相关文章

最新更新