【关于Delphi编译产生警告的几点总结】 ( 积分: 0 )

  • 主题发起人 主题发起人 teams
  • 开始时间 开始时间
T

teams

Unregistered / Unconfirmed
GUEST, unregistred user!
//==============================================================================
// 关于Delphi编译产生警告的几点总结
// 这些警告或提示并不影响程序的正常编译。。。
//==============================================================================


1) 关于运行平台的警告信息
[Warning] frm_main.pas(3): Unit 'ShellCtrls' is specific to a platform

解决办法:在 uses 语句后加一行:{$WARN UNIT_PLATFORM OFF}

//----------------------------------------------------------------------------
//提示你的程序引用的单元或使用的控件,只能在Windows平台下运行正常
//而在Linex或者其他的操作系统下会出问题
//如果你的系统只运行在Windows下. 那么这种警告不用管它
//----------------------------------------------------------------------------

2) 关于分配值从未使用的提示

对于指针变量若提示:
[Hint] MMClass.pas(208): Value assigned to 'P' never used

procedure TMMClass.SpString(S: String);
var
P: PChar;
Stmp:string;
begin
Stmp:=S;
P:= @Stmp[1];

... ...

FreeAndNil(P);
~~~~~~~~~~~~~~
end;
//--------------------------------------------------------------------------
//指针使用完后这样释放 FreeAndNil(P),否则,可能提示上面提示
//--------------------------------------------------------------------------


3) 关于使用抽象类的警告
例如:
StrList:Tstrings;
StrList:=Tstrings.Create;

[Warning] Unit1.pas(45): Constructing instance of 'TStrings' containing abstract method 'TStrings.Clear'
[Warning] Unit1.pas(45): Constructing instance of 'TStrings' containing abstract method 'TStrings.Delete'
[Warning] Unit1.pas(45): Constructing instance of 'TStrings' containing abstract method 'TStrings.Insert'
//----------------------------------------------------------------------------
//抽象类错误,tstrings 是很多次类,如tstringlist的基类,
//有很多方法只有声明没有定义,在子类中才实现,
//因此,你调用了一些抽象方法如insert后,将产生错误提示
//将Tstrings.Create中的Tstrings改为TstringList。
//----------------------------------------------------------------------------

4)关于 Delphi7 不安全的类型警告

[Warning] Unit1.pas(47): Unsafe type 'procedure, untyped pointer or untyped parameter'
[Warning] Unit1.pas(51): Unsafe type 'procedure, untyped pointer or untyped parameter'
[Warning] Unit1.pas(65): Unsafe typecast of 'procedure, untyped pointer or untyped parameter' to 'TForm'
[Warning] Unit1.pas(87): Unsafe typecast of 'procedure, untyped pointer or untyped parameter' to 'TForm'

//----------------------------------------------------------------------------
//这些警告是针对.net的
//把Project/Options/Compiler Messages/Warnings 中 [UnsafeType、UnsafeCode、UnsafeCast] 的对勾去掉。
//----------------------------------------------------------------------------
 
//==============================================================================
// 关于Delphi编译产生警告的几点总结
// 这些警告或提示并不影响程序的正常编译。。。
//==============================================================================


1) 关于运行平台的警告信息
[Warning] frm_main.pas(3): Unit 'ShellCtrls' is specific to a platform

解决办法:在 uses 语句后加一行:{$WARN UNIT_PLATFORM OFF}

//----------------------------------------------------------------------------
//提示你的程序引用的单元或使用的控件,只能在Windows平台下运行正常
//而在Linex或者其他的操作系统下会出问题
//如果你的系统只运行在Windows下. 那么这种警告不用管它
//----------------------------------------------------------------------------

2) 关于分配值从未使用的提示

对于指针变量若提示:
[Hint] MMClass.pas(208): Value assigned to 'P' never used

procedure TMMClass.SpString(S: String);
var
P: PChar;
Stmp:string;
begin
Stmp:=S;
P:= @Stmp[1];

... ...

FreeAndNil(P);
~~~~~~~~~~~~~~
end;
//--------------------------------------------------------------------------
//指针使用完后这样释放 FreeAndNil(P),否则,可能提示上面提示
//--------------------------------------------------------------------------


3) 关于使用抽象类的警告
例如:
StrList:Tstrings;
StrList:=Tstrings.Create;

[Warning] Unit1.pas(45): Constructing instance of 'TStrings' containing abstract method 'TStrings.Clear'
[Warning] Unit1.pas(45): Constructing instance of 'TStrings' containing abstract method 'TStrings.Delete'
[Warning] Unit1.pas(45): Constructing instance of 'TStrings' containing abstract method 'TStrings.Insert'
//----------------------------------------------------------------------------
//抽象类错误,tstrings 是很多次类,如tstringlist的基类,
//有很多方法只有声明没有定义,在子类中才实现,
//因此,你调用了一些抽象方法如insert后,将产生错误提示
//将Tstrings.Create中的Tstrings改为TstringList。
//----------------------------------------------------------------------------

4)关于 Delphi7 不安全的类型警告

[Warning] Unit1.pas(47): Unsafe type 'procedure, untyped pointer or untyped parameter'
[Warning] Unit1.pas(51): Unsafe type 'procedure, untyped pointer or untyped parameter'
[Warning] Unit1.pas(65): Unsafe typecast of 'procedure, untyped pointer or untyped parameter' to 'TForm'
[Warning] Unit1.pas(87): Unsafe typecast of 'procedure, untyped pointer or untyped parameter' to 'TForm'

//----------------------------------------------------------------------------
//这些警告是针对.net的
//把Project/Options/Compiler Messages/Warnings 中 [UnsafeType、UnsafeCode、UnsafeCast] 的对勾去掉。
//----------------------------------------------------------------------------
 
后退
顶部