BPL是为了解决独立可执行程序过大的问题,模仿DLL的一种技术。
两者在内部机制有一些差别。在 Wn 95/NT 中 的DLL内部机制我了解这些:
   1.不同的应用程序调用相同的DLL,只需在内存中装载一次。在系统内会有一个表格来记载X.DLL的使用次数,每一次重复装载,将X.DLL的使用次数加一。
   2.DLL没有自己的堆栈,它的任何内存分配或它建立的全局数据都驻留在主进程的地址空间。每个DLL都有自己的独立内存空间。
   3.在卸载DLL的时候,将释放DLL中分配的内存,并将X.DLL的使用次数减一,直到使用次数为0,才会真正地将它由系统中释放。
现在还有些疑问:
  1.DLL分配的内存空间和应用程序分配的内存空间是相互独立的,那么在互相访问内存的时候,是不是有些约定?
   我曾经发现,如果在DLL函数中传递对象参数,一般不会报错,但是在传递数据集的时候或者数据库连结的时候,往往会发生内存访问错误。不知道什么原因。
  2.在卸载DLL的时候,DLL函数中创建的对象,如果没有释放,将会报错。BPL虽然很多地方和DLL相似,但还是有些差别,希望能够和大家交流。
  1.首先装载的时候,我想还是和DLL一样。
  2.内存分配上,肯定也是驻留在主进程的地址空间。每个BPL也都有自己独立的堆栈,但是每个BPL的全局数据区只有一份,也就是说可以共享的。
  3.在卸载bPL的时候,只是释放BPL中堆栈的内存,对于全局数据区,将由主进程结束时释放。欢迎大家批评指正!
将不断跟贴!