至于你所说的结构体,大概说的是自定义记录类型吧,你在创建实例和使用之后,用free销毁它就行了.全局变量,它的作用是在整个程序运行期间起保存和传递数据之用的,也就是说这个变量在用户执行某一操作之后,要保存数据,过一会用户在执行另一个操作时,还要使用这个数据,只有要承担这种任务的变量才定义为全局变量,除此之外,都应定义为局部变量.全部变量中的数据需要程序员销毁或者清除才能释放内存资源.
这个函数不需要释放。你可以用以下方法验证:
unit Unit2
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls
type
PTT= ^TStringList
TForm2 = class(TForm)
Button1: TButton
procedure Button1Click(Sender: TObject)
private
function StrListFunError(Var AI: PTT):TStringList
function StrListFunRight(Var AI: PTT):TStringList
public
end
var
Form2: TForm2
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject)
var
test:TStringList
tt1:PTT
begin
test:=TStringList.Create
try
test:=StrListFunError(tt1)//虽然此时未报错,得所指向的对象已经不正确
ShowMessage(tt1^.Text )//因为已经被释放,不能显示正确值
ShowMessage(test[0])//出错,因为在原函数中已经被释放
test:=StrListFunRight(tt1)
ShowMessage(tt1^.Text)//test还没有使用,所以没有被释放,可以显示正确值
ShowMessage(test[0])
ShowMessage(tt1^.Text)//test已经使用,所以被释放,出现错误
//结论:
//对于TStringList作为函数或者过程的返回值时,在被调函数内不需要释放
//由编译器进行自动处理
finally
test.Free
end
end
function TForm2.StrListFunError(Var AI:PTT): TStringList
var
Re:TStringList
begin //错误代码
Re:=TStringList.Create
Ai:=@Re
try
Re.Add('Error Test')
Result:=Re
finally
Re.Free
end
end
function TForm2.StrListFunRight(var AI: PTT): TStringList
var
Re:TStringList
begin //正确代码
Re:=TStringList.Create
Ai:=@Re
try
Re.Add('Right Test')
Result:=Re
finally
//正确代码,不需要释放,交由编译器处理
//Re.Free
end
end
end.
Delphi有静态加载Dll和动态加载Dll,静态加载的Dll不用我们释放;动态加载需要我们自己释放;这里只附上动态加载DLL的释放(此处Dll和Exe程序在同一路径下):
procedure TForm1.Button2Click(Sender: TObject)
var MyHandle:THandle
FPointer:Pointer
MyDll_Func: function (s:string):Integerstdcall
begin
try
try
MyHandle:=LoadLibrary('project1.Dll')
if MyHandle<>0 then
begin
FPointer:=GetProcAddress(MyHandle ,PChar(Edit1.text))
if FPointer<>nil then
begin
MyDll_Func:=FPointer
MyDll_Func(Edit1.text)
end
else
ShowMessage('此'+Edit1.text+'方法,在project1.Dll中不存在')
end
except
showmessage('加载project1.Dll异常')
end
finally
FreeLibrary(MyHandle)
end
end
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)