刚刚在用Delphi写一个五笔输入法安装程序,在导出资源这个过程中出现一个问题,就是编译的时候出现错误提示:

[Warning] Unit1.pas(33): Variable 'Res' might not have been initialized

其实这只是个警告,对于程序运行是没有关系的,但是我想知道原因并且把它去掉。

导出资源的源代码我是这样写的:

procedure ExtractRes(ResType, ResName, ResNewName: string);
var
Res: TResourceStream;
begin
try
Res:= TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
finally
Res.Free;
end;
end;

一、由于有try语句出现流程分支而出现的,把try...finally结构暂时注释调再编译警告就会消失。

二、警告的原因是有可能Res在Create方法时失败,这样Res.Free就会有异常,把
Res:= TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
放到try外面即可!