图像处理的内存问题!(200分)

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

j_xu

Unregistered / Unconfirmed
GUEST, unregistred user!
现在需要调用一个其他公司提供的图像处理动态链接库,
该动态链接库需要传入HBITMAP,返回HBITMAP,我们再通过返回的HBITMAP存为文件。

问题:
1。通过返回的HBITMAP,我们可以进行处理,但是,动态链接库自身为返回的HBITMAP分配的内存空间是否能保证正确的得到释放?
2。如果不能保证,我们的调用程序是否能通过HBITMAP释放动态链接库分配的内存?
 
以function(const T:TBitmap):TBitmap或Procedure (Var T: TBitmap)的形式反回的内容都可以不考虑动态接库自身分配的内存空间的释放问题,只用释放你自己的变量就可以了。
 
如果不是频繁在调用动态连接库的化,可以动态调用。
顺便问一下,你的图像处理动态链接库是处理什么图像的,得到有是什么结果?
 
其实你的疑问直接去找提供给你的那家公司去了解,不是更直接一些吗?
 
to holyknight:
那是否就是,当我调用FreeLibrary后,就能保证动态链接库分配的内存被释放?
to chen_cch:
需要频繁调用,有可能一次要连续处理上万张图像,现在考虑是在一个Nt服务里调用!
 
to app2001:
因为我怀疑,但直接去问又觉得不妥。请见谅~
 
自然不会
如果你不再需要返回的HBITMAP 需要调用DeleteObject(HBITMAP的内存空间是由系统管理的)
 
关键要看那个DLL里是怎么做的,它返回的HBITMAP是否是它创建的,还是只是把你传进去的HBITMAP对应的BITMAP改一下返回其HANDLE
如果是DLL创建的,你就要用DeleteObject来释放,否则就不用
 
能不能释放就要看你调用的动态连接库在返回BITMAP这个过程中的操作了,一般不能释放,直到你的程序结束或使用DeleteObject。但如果动态连接库是对指针变量的操作又另当别论了。
 
后退
顶部