编程日日贴(36)
软件世界
Delphi
free和destroy的使用
Delphi的vcl控件,具有free和destroy两个解除控件的方法。它们都用来在系统中清除定义的vcl控件,但是它们有什么区别呢?
简单地说,free似乎清除得更彻底,因为它首先检查对象值是否为nil,如果不是则调用destroy方法,并且将控件占用的内存释放,将变量设置为nil。如果控件中包含其他控件即其他控件的owner属性为该控件,那么它会调用这些控件的free方法,释放它包含的控件。
而destroy方法好像只是做了一般的清除处理,释放内存,但不会将变量置为nil。
注意,不能在控件或它包含的控件的事件中调用free方法。如果想在form或form包含的控件的事件中释放form,你不能使用free方法,而要使用release方法。根据Delphi帮助中的说明:“不要在应用程序中直接调用destroy方法,作为替代方法调用free。” (刘沛亮)
ASP.net
解开ZIP压缩文件
最近,笔者用C#做网页时,遇到一个问题:如何解开服务器端的压缩文件(.zip压缩文件),ASP.net环境中没有提供解压缩的控件,看来必须自己做一个。
首先想到,在VC++6.0环境下,笔者用的是从网上找来的CInfoZip类来解.zip压缩文件的,现在要做的就是把CInfoZip类移植到ASP.net中,把CInfoZip类直接添加到C#的程序中。编译时,程序报错,看来直接把CInfoZip类添加到C#中是不行的,只好另想他法。
考虑到.NET Framework SDK环境是跨语言平台的,是否可以在Visual Studio .Net中用C++编一个解压缩的动态连接库给C#用呢?于是,笔者就在VS.Net中创建一个“托管的C++类库”新项目,将CInfoZip类添加到这个项目中,将要解压的函数写好,编译,正常。
其次,在C#项目中,引用刚才在VC++.net项目编译好的.dll文件,调用其中解压缩的函数,编译通过,运行顺利。
最后,我又做了一个测试,用VB.net写网页,调用刚才VC++.net编写的解压缩的.dll文件,竟然也可以运行,看来.NET Framework SDK的的确确是一个跨语言平台的好东东。 (吴波)