CA1417: Nepoužívejte OutAttribute u parametrů řetězce pro P/Invokes

Vlastnost Hodnota
ID pravidla CA1417
Název Nepoužívejte OutAttribute u řetězcových parametrů pro P/Invoke volání.
Kategorie Vzájemná funkční spolupráce
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako upozornění
Příslušné jazyky C# a Visual Basic

Příčina

Řetězcový parametr P/Invoke je předán hodnotou a označen znakem OutAttribute.

Popis pravidla

Modul runtime .NET automaticky provádí prokládání řetězců. Pokud je interovaný řetězec označený OutAttribute předán podle hodnoty funkci P/Invoke, může to destabilizovat modul runtime.

Jak opravit porušení

Pokud je potřeba přenést upravená řetězcová data zpět volajícímu, předejte řetězec jako odkaz. V opačném případě lze OutAttribute odebrat bez jakýchkoli dalších změn.

 // 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);

Kdy potlačit upozornění

Není bezpečné potlačit upozornění z tohoto pravidla.

Viz také