读书人

在其他程序的Form怎么在运行时加载

发布时间: 2012-02-16 21:30:36 作者: rapoo

在其他程序的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

读书人网 >.NET

热点推荐