【发布时间】:2017-04-19 07:52:55
【问题描述】:
Delphi 2007 中的以下代码给了我警告
W1047 不安全代码 '@operator'
在将@ThreadNameInfo 传递给 RaiseException 的行中:
procedure SetThreadName(const _Name: AnsiString);
var
ThreadNameInfo: TThreadNameInfo;
begin
ThreadNameInfo.FType := $1000;
ThreadNameInfo.FName := PAnsiChar(_Name);
ThreadNameInfo.FThreadID := $FFFFFFFF;
ThreadNameInfo.FFlags := 0;
try
RaiseException($406D1388, 0, SizeOf(ThreadNameInfo) div SizeOf(LongWord),
@ThreadNameInfo); // --> Here
except
// ignore
end;
end;
除了禁用“不安全代码”的编译器警告之外,还有其他方法可以消除此警告吗?既然 Delphi 不再支持 dotNET,这个警告还有意义吗?
我尝试将参数显式类型转换为 PDWord(最后一个参数的声明类型),这并没有改变任何东西。
【问题讨论】:
-
Addr(ThreadNameInfo) 工作吗?
-
@LURD
Addr和@完全可以互换,除了受$TYPEDADDRESS的影响之外。具体来说,Addr是一个返回Pointer的内在函数。另一方面,$TYPEDADDRESS ON然后@产生一个类型化的指针。结论,Addr()也会导致发出警告。
标签: delphi delphi-2007