Le code suivant dans Delphi 2007 me donne l'avertissementComment puis-je me débarrasser de "W1047 code non protégé '@ opérateur" dans cet appel RaiseExeption
W1047 de code non protégé '@ opérateur'
dans la ligne qui passe à @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;
en dehors de la désactivation de l'avertissement du compilateur pour « code non sécurisé », est-il un autre moyen de se débarrasser de cet avertissement? Cet avertissement a-t-il même un sens, puisque Delphi ne supporte plus dotNET?
J'ai essayé de transtyper explicitement le paramètre en PDWord (le type déclaré du dernier paramètre), qui n'a rien changé.
Est-ce que Addr (ThreadNameInfo) fonctionne? –
@LURD 'Addr' et' @ 'sont complètement interchangeables, de toutes les façons autres que d'être affectés par' $ TYPEDADDRESS'. Plus précisément, 'Addr' est une fonction instrinsique qui retourne' Pointer'. D'autre part, avec '$ TYPEDADDRESS ON' alors' @ 'donne un pointeur typé. Conclusion, 'Addr()' entraînera également cet avertissement étant émis. –