中国开发网: 论坛: 程序员情感CBD: 贴子 717766
王中王
真抱歉,提这么过时的问题:VCL对包的处理,静态载入和动态载入有什么区别嘛?
静态指让EXE build with package,带上指定的包。
动态指EXE在运行地通过loadpackage函数加载。

我碰到的问题及已了解到的情况:
1、load package与 load DLL的不同在于loadpackage后,会执行各个单元的initialize段

问题一、
2007版本下,编译链接一个依赖indy的包A时,只require了indyprotocols包,可以链接通过。实际上运行 时是需要indycore及indysystem包的。
EXE静态加载情况下,不会有问题,三个bpl都会加载或关联加载,对函数、对象使用 没有问题。
但EXE动态加载时,就会内存访问异常。跟踪的情况是在加载包时,包初始化代码中,win socket的初始化中调用gethostname时访问了空指针,感觉象是已初始化好的win 底层socket(之前跟踪运行曾经正常调用过初始化win socket的函数),在后来又失效了(两个bpl加载没有共享数据?)。

如果在链接包A时,明确指定依赖(require)另两个indy的包(core & system),可以暂时解决问题。

问题二、
也是使用 了indy的包,动态加载运行,如果自己load 、unload package,没有问题。如果自己load,但EXE退出时由EXE进行unload,就会报内存访问异常。当然,静态加载没有问题。


难道VCL对静态载入和动态载入有不同处理?
另外,以包的方式给定模块,还没有有其它需要注意的地方或是陷井?

记得李战和其他的兄弟以前都写过关于包的文章,不知道在具体使用 上,有没有直接可以借鉴的经验?先谢谢了!
http://wangzw.wordpress.com/
个性化台历、日历制作
http://shop33697570.taobao.com/

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录