首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

在其他程序的Form,怎么在运行时加载 dll 中 DataModule 下的 Imagelist 控件

2012-02-16 
在其他程序的Form,如何在运行时加载 dll 中 DataModule 下的 Imagelist 控件?目的:为了共享资源,我现在想

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

热点排行