CA1417: P/Invokes sztringparamétereken nem használható OutAttribute
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1417 |
Cím | Ne használjon OutAttribute sztringparamétereket a P/Invokes esetében |
Kategória | Együttműködési lehetőség |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 9-ben | Figyelmeztetésként |
Ok
A P/Invoke sztringparamétert az érték adja át, és a következővel OutAttributevan megjelölve: .
Szabály leírása
A .NET-futtatókörnyezet automatikusan végrehajtja a sztringek közötti internálást. Ha egy beosztott sztringet OutAttribute az érték átad egy P/Invoke-nek, a futtatókörnyezet destabilizálható.
Szabálysértések kijavítása
Ha a módosított sztringadatok visszarendezésére van szükség a hívónak, adja át a sztringet hivatkozással. Ellenkező esetben a OutAttribute többi módosítás nélkül is eltávolítható.
// Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);
// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);
// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetésének mellőzése nem biztonságos.
Lásd még
Dolgozzon együtt velünk a GitHubon
A tartalom forrása a GitHubon található, ahol létrehozhat és áttekinthet problémákat és lekéréses kérelmeket is. További információért tekintse meg a közreműködői útmutatónkat.