zjy
管理员
UID 2
Digest Posts
6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16 Location China
Status Offline
|
|
不好意思,上午没测试就回复了帖子,刚才跟踪了一下 Delphi5 的 IDE,发现包的安装远比想象中的复杂。
ToolsAPI 并没有提供设计期包的安装和缷载接口,包的管理由 IDE 的内核 coride50.bpl 完成。在这个 bpl 中的 Pakmgr、Paklist、Pakload 等单元中实现了包管理器和列表等内部类,并在设计期维护着一份包列表类 TPackageList 的实例(包括已安装的和禁用的)。当我们在 IDE 中装载一个包时,IDE 内部实际上执行了很多的操作,包括检查包是否已安装/被禁用、检查包的 RequirePackage 列表等等,而不仅仅是调用 LoadPackage 这么简单。
暂时我还没有找到合适的方法来实现装载包的功能。因为 coride50.bpl 没有提供 dcp 文件(更没有源码可读^_^),没办法象访问 VCL 那样直接操作这些内部对象,而通过 coride50 的 dump 信息虽然可以看到一些类声明,不过也没有找到可以直接装载包的过程。
如果你有兴趣,可以试试自己去跟踪 IDE 的这部分代码,就算找不到方法,也可以了解不少东西,呵呵:)
跟踪 IDE 的方法:随便建一个 dll 工程,把 Host 设置成 delphi32.exe,运行后,通过 View 显示 Modules 窗口,找到 coride50.bpl 模块,在导出列表中查找有可能会调用的方法(如@Paklist@TPackageList@AddPackage$qqr17System@AnsiString),设个断点,就可以在 CPU 窗口中跟踪 IDE 的内核了。
|
Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
|
|
|