Delphi 的Package 的动态调用(100分)

  • 主题发起人 主题发起人 Jinie
  • 开始时间 开始时间
J

Jinie

Unregistered / Unconfirmed
GUEST, unregistred user!
我想动态的Loadpackage,请问应怎办?谢谢.
 
如果是动态DLL调用,本站控件库中的PlugIn.zip是个例子。
如果一定是Package,隐约记得有个站点的Tips中有,可惜记不清地址了,等
其他大虾告诉你吧。
 
一个 package 可以通过调用 LoadPackage 函数来动态地调入。例如,用 OpenDilog 对话框选择一个 package 然后调入并加入到PackageList.Items 中:

with OpenDialog1 do
if Execute then
with PackageList.Items do
AddObject(FileName, Pointer(LoadPackage(Filename)));

当你用完 Package 后, 还可以动态的用 UnLoadPackage 过程卸载他。
必须注意,当你卸载一个 package 时要先 destroy 那些使用该 package 中的 Objects 并且 unregister 那些 registered Class。
 
我也是通过上述方法来LoadPackage.
问题是

在Package中已经进行RegisterClass.

LoadPackage的程序为

procedure aa
var
hPackage:hModule;
aClass:TPersistentClass;
begin
hPackage=LoadPackage(PackageName);
aClass=GetClass(RegisterClassName);
{为什么aClass=nil}
end;

aClass应返回登记的类,不为空。但为什么为空呢?谢谢!
 
您的问题已经不是简单的 LoadPackage 的问题了, 而是怎样使用 Package 的问题,不知是否如此?
 
也可以这么说!
 
这两天教育网东北的邮路不够畅通, 故无法与您继续讨论, 抱歉!
请发 Email 给我 hzhang@sun20.hrbucea.edu.cn
我得到你的 Email 地址后将寄给你一个 LoadPackage 的示例源程序给你
 
我的email为: cj@public.sinosafe.com.cn
谢谢
 
Huizhang,
<a href="mailto:yysun@nt4.gislab.ecnu.edu.cn">也请Cc一份给我.</a>
 
LoadPackage 的动态调用的实际应用意义不是很大, 使用动态调用时要注意以下几个
问题:

1. 你的Project Options中必须设置成使用 runtime package
2. 你想动态生成的 classes 所在的 unit 必须在 interface 的 uses 说明中, 这
样你的程序才能识别要生成的 class name
3. 在 使用 loadpackage 前必须 使用 UnLoadPackage 将要使用的 package 卸载
注意: 卸载一个 package 相应的使用它的所有 class 将会丢失
4. 使用 loadpackage 后, 可以直接创建 package 中的 class 不需要 registerclass
因为 registerclass 只是用来为 Component Palette 注册 component 的
<hr>
<a href="/delphi/attachments/pkgdemo.zip">下载答案程序</a>。
 
后退
顶部