在其他程序的Form,如何在运行时加载 dll 中 DataModule 下的 Imagelist 控件?
目的:
为了共享资源,我现在想把Imagelist、TActionList等控件属性/内容设置好后,放在一个dll文件内,供其他Form动态加载。
我的做法:
我按照如下方法,但是提示Access addreess memory 错误!
请教问题原因,或其他解决方法。
----------------------dll 工程文件
library DataDll;
uses
SysUtils,
Classes,
Controls,
ActnList,
//CommData内放置了一个设置好的Imagelist
dmCommData in 'dmCommData.pas ' {CommData: TDataModule};
function GetImageList: TImageList; stdcall;
var
dm: TCommData;
begin
dm := TCommData.Create(nil);
try
Result := dm.ImageList;
finally
dm.Free;
end;
end;
exports
GetImageList,
...
---------------------外部程序的调用:
ImageList: TImageList;// 全局变量
procedure GetObjects;
var
H: THandle;
GetImageList: TGetImageLIst;
s: boolean;
begin
H := LoadLibrary( 'DataDll.dll ');
if H > 31 then
begin
@GetImageList := GetProcAddress(H, 'GetImageList ');
if @GetImageList <> nil then ImageList := GetImageList;
end;
FreeLibrary(H);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//ImageList := TImageList.Create(nil);
GetObjects;
ActionList.Images := ImageList; //到这步出错:访问内存地址错误
...
end;
[解决办法]
沒試過,幫頂
[解决办法]
ImageList.assign(GetImageList)
试试
[解决办法]
要先Create