我正在使用Delphi XE.我使用Delphi Soap遇到了内存泄漏问题.原来是由于TWSDLLookup.Destroy中缺少.Free调用,如
QC 91160中所述
我遇到的问题是描述的解决方法,它只是将FLookup.Free添加到TWSDLLookup.Destroy方法.
我不想更改Delphi源代码,所以我尝试将单元复制到我的项目文件夹,进行更改和重新编译,如Tom的答案中的here所述.这种技术的问题在于它显然只有在你重新编译所有依赖单元时才有效.我曾尝试将WSDLLookup.pas复制到我的项目目录中,并收到Stackoverflow错误.我不熟悉Web Services / SOAP,所以如果我使用这种技术,我不知道应该复制哪些其他单元.
Rob Kennedy在同一页面上的回答描述了一种涉及代码挂钩的不同技术 – 但它似乎并不适用于对象方法.我已经完成了他的建议并下载了TNT Unicode控件的免费代码并找到了相关的程序,但我一直无法找到有关如何挂钩对象方法的信息 – 如果这确实可行的话.如果我能做到这一点,我会挂钩TWSDLLookup.Destroy并添加FLookup.Free调用.
如何解决这个问题的任何想法将非常感激.我是一个新手程序员,所以我希望我错过了一些明显的东西?
解决方法
你要做的事实上工作得很好.我自己测试了一下.这是我使用的项目文件:
program WSDLLookupTest; {$APPTYPE CONSOLE} uses WSDLLookup in 'WSDLLookup.pas'; var intf: IInterface; begin intf := GetWSDLLookup as IInterface; end.
我制作了WSDLLookup.pas文件的副本,并将其放在与.dpr文件相同的目录中.然后,在副本而不是原始副本中,我修改了TWSDLLookup.Destroy.
destructor TWSDLLookup.Destroy; begin Beep; ClearWSDLLookup; FLookup.Free; inherited; end;