当前位置:编程学习 > VB >>

VB调用api会不会导致内存泄漏?

目的:给第三方软件(delphi写的,无源码)增加一个功能
做法:
1、用VB程序生成一个按钮Load Command1(Command1.UBound+1)
2、用SetParent把VB生成的按钮放到第三方软件上

但是问题是第三方软件的关闭按钮无法拦截,在还没有ULoad Command1(Command1.Ubound),第三方软件就已经关闭了。这时如果查Command1.Ubound会发现其值依然是+1的情形,而且Command1(Command1.Ubound).hWnd=0

请问这样会不会导致分给Command1(Command1.UBound+1)的内存没有被收回而导致内存泄漏? --------------------编程问答-------------------- 做个定时器,检查是不是关了 --------------------编程问答-------------------- 既然你能把自己的按钮放到‘别人的地盘’上去,何不 HOOK 它的 WinProc() 函数呢?
--------------------编程问答-------------------- 给那个delphi加个 exitprocess 的api hook,如果他是用这个方法退出进程的,那么在拦截到这个事件的时候,向自己的程序发个通知消息,自己的程序修改释放无用内存 --------------------编程问答-------------------- 既然你能把按钮Command1通过SetParent到第三方软件,那也能在第三方软件窗口关闭时把这个按钮SetParent回来,只须在回调中过滤第三方软件窗口关闭的消息或者通过HOOK实现。 --------------------编程问答-------------------- SetParent回来,父窗口句柄置为0就行了! --------------------编程问答-------------------- 楼上的,请看我的说明,如果能检测到退出,就没有此一问了
另外VB做Hook实在太难了 --------------------编程问答-------------------- 开个100分的帖子,我给你做吧 --------------------编程问答--------------------
引用 1 楼 alifriend 的回复:
做个定时器,检查是不是关了

等到定时器检测到关了时已经晚了 --------------------编程问答--------------------
引用 7 楼 pctgl 的回复:
开个100分的帖子,我给你做吧

100分,没问题! --------------------编程问答--------------------  那好吧,说说你想在拦截了 ExitProcess 之后,要做什么? 比如是否要 SetParent 回原有的窗口? 要不要给原有的窗口发个什么消息之类的? 还要干什么? 

--------------------编程问答-------------------- 百分帖已经开了http://topic.csdn.net/u/20091215/19/64268521-0026-43af-b5c9-a064717d4909.html --------------------编程问答--------------------  怎么感觉你想看我笑话一样 --------------------编程问答-------------------- 对方delphi的窗口是一个子窗口,最好能拦截这个子窗口的打开与关闭事件,打开时放个VB按钮上去,关闭时SetParent回来 --------------------编程问答-------------------- 我也是做技术的,技不如人,一定要好好学习,怎么能看笑话呢?再说也是为了完成我的任务 --------------------编程问答--------------------  噢卖糕的,你看看....

这会又变了, 这子窗口的创建销毁,拦截exitprocess就是....了 --------------------编程问答-------------------- 哦,是吗?能帮我写一段程序吗?hook我真的不太会做! --------------------编程问答-------------------- 那个软件有多大?  是否还拖着dll ? 照现在你说的这样, 那就需要分析软件了, 怎么创建的窗口, 资源加载还是api创建的,怎么关闭的, 是不是要在里面做个子类化之类的............. --------------------编程问答-------------------- 子类技术能在第三方软件中使用吗?我没用过
那个软件是不小,有Dll是肯定的,今天晚上发不了,明天我可以给你发个软件,不知你明天能上来么? --------------------编程问答-------------------- 那就周末吧,你想要的东西已经背离了,开始预想的 hook exitprocess 那样就能简单完成的情况

软件很大,我就不收了。我直接写,发你调试,不过要周末了,因为我没那么多时间 --------------------编程问答-------------------- 你现在这个要求,我都该收费了 --------------------编程问答-------------------- 友情Up...............
--------------------编程问答-------------------- 分友人接了,帮顶 --------------------编程问答--------------------
引用 17 楼 pctgl 的回复:
那个软件有多大?  是否还拖着dll ? 照现在你说的这样, 那就需要分析软件了, 怎么创建的窗口, 资源加载还是api创建的,怎么关闭的, 是不是要在里面做个子类化之类的.............

请问怎么样查出这个delphi软件创建窗口的方式? --------------------编程问答--------------------
引用 20 楼 pctgl 的回复:
你现在这个要求,我都该收费了

收费也没问题,只要能解决问题,什么条件都答应 --------------------编程问答--------------------
引用 19 楼 pctgl 的回复:
那就周末吧,你想要的东西已经背离了,开始预想的 hook exitprocess 那样就能简单完成的情况

软件很大,我就不收了。我直接写,发你调试,不过要周末了,因为我没那么多时间

我现在是这样做的,VB中放一个timer,每秒钟查询一下子窗体是否运行,如果发现子窗体运行,就插入按钮;如果已经运行检查一下是否关闭,如果关闭就unload(按钮),但是unload的时候发现按钮的hwnd已经为0了
曾经尝试过使用wmi去处理关闭的事件,但是wmi也是等到窗体关闭了才能查到 --------------------编程问答--------------------
引用 24 楼 hg533 的回复:
引用 20 楼 pctgl 的回复:
 你现在这个要求,我都该收费了

 收费也没问题,只要能解决问题,什么条件都答应


我给你发消息了,如果可以,联系我吧,周末帮你搞定 --------------------编程问答-------------------- 无法加你,看到信息了么 --------------------编程问答-------------------- PctGL,怎么没有消息了?收到我的留言了么?是不是bpl无法hook? --------------------编程问答-------------------- 友情Up...............
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,