“谁调用谁释放”(100分)

  • 主题发起人 主题发起人 liuchong
  • 开始时间 开始时间
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
“谁调用谁释放”
DLL函数内部当然也可以动态分配内存,但这个动态分配的内存一定要由这个函数或同一个DLL里面的其他函数释放掉,不能让调用DLL的程序来释放。这是DLL编程的一个通用的铁律和常识


但为什么《Delphi中的DLL封装和调用对象技术及配书源码》里面是在dll中创建在对象而在exe中free的?
 
有这种可能,在动态库中创建的内存块,但考虑到后续主程序还需使用,就会把该内存块地址传递给主程序,有主程序管理,但肯定不推荐使用。
 
呵呵,这个你要问写这个代码的人了。
路有很多条,能正确到达目的地的都是可行的,个人偏好不同而已。
 
这个关系不是很大吧。
 
所谓用错误的方法达到正确的目的,就是这样了.
 
这有什么关系呢,能抓到老鼠就是好猫
 
你之后给的代码MyCar.Free;没错是在EXE中调用,不过实际集体释放的是Destroy过程,destructor Destroy
virtual;
虚拟过程调用是通过具体对象的VTM表找到具体的过程地址调用的,所以实际上调用的是DLL中的Destroy


还有就是内存释放应该是哪个内存管理器创建,就应该由那个管理器释放,EXE与DLL一般是各自有自己的内存管理器,所以内存块不能在DLL中创建在EXE中释放,不过ShareMemRep控件可以使EXE与DLL共享同一个管理器
 
后退
顶部