目的:
为了共享资源,我现在想把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、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;
试试