CA1417: Do not use OutAttribute
on string parameters for P/Invokes
Property | Value |
---|---|
Rule ID | CA1417 |
Title | Do not use OutAttribute on string parameters for P/Invokes |
Category | Interoperability |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 8 | As warning |
Cause
A P/Invoke string parameter is passed by value and marked with OutAttribute.
Rule description
The .NET runtime automatically performs string interning. If an interned string marked with OutAttribute is passed by value to a P/Invoke, the runtime can be destabilized.
How to fix violations
If marshalling of modified string data back to the caller is required, pass the string by reference instead. Otherwise, the OutAttribute can be removed without any other changes.
// 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);
When to suppress warnings
It is not safe to suppress a warning from this rule.
See also
Работете съвместно с нас в GitHub
Източникът за това съдържание може да бъде намерен в GitHub, където можете също да създавате и преглеждате проблеми и да изтегляте искания. За повече информация вижте нашето ръководство за сътрудник.
Обратна връзка
https://aka.ms/ContentUserFeedback.
Очаквайте скоро: През цялата 2024 г. постепенно ще отстраняваме проблемите в GitHub като механизъм за обратна връзка за съдържание и ще го заменим с нова система за обратна връзка. За повече информация вижте:Подаване и преглед на обратна връзка за