Delphi 我该如何摆脱“我该怎么做?”;W1047不安全代码';@操作员'&引用;在这个RaiseExection调用中
Delphi2007中的以下代码给出了警告 W1047不安全代码“@操作员” 在将@ThreadNameInfo传递给RaiseException的行中:Delphi 我该如何摆脱“我该怎么做?”;W1047不安全代码';@操作员'&引用;在这个RaiseExection调用中,delphi,delphi-2007,Delphi,Delphi 2007,Delphi2007中的以下代码给出了警告 W1047不安全代码“@操作员” 在将@ThreadNameInfo传递给RaiseException的行中: procedure SetThreadName(const _Name: AnsiString); var ThreadNameInfo: TThreadNameInfo; begin ThreadNameInfo.FType := $1000; ThreadNameInfo.FName := PAnsiChar(_Name);
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(最后一个参数的声明类型),但没有任何更改。此警告用于.net编译器编译的代码。如果您不使用Delphi.net编译器,您可以也应该禁止该特定警告。Addr(ThreadNameInfo)是否有效?@LURD
Addr
和@
完全可以互换,除了受$TYPEDADDRESS
的影响之外。具体来说,Addr
是一个返回指针的内在函数。另一方面,如果启用$TYPEDADDRESS,则@
将生成一个键入的指针。结论,Addr()
也将导致发出该警告。