共用方式為


CA1417:請勿 OutAttribute 在 P/Invokes 的字串參數上使用

屬性
規則識別碼 CA1417
職稱 請勿對 P/Invokes 的字串參數使用 OutAttribute
類別 互通性
修正程式是中斷或非中斷 不中斷
預設在 .NET 9 中啟用 作為警告

原因

P/Invoke 字串參數會以 值傳遞,並以標記OutAttribute

檔案描述

.NET 運行時間會自動執行 字串插播。 如果以 OutAttribute 標記的實習生字串會以值傳遞至 P/Invoke,運行時間可能會不穩定。

如何修正違規

如果需要將修改過的字串數據封送處理回呼叫端,請改為以傳址方式傳遞字串。 否則, OutAttribute 可以移除,而不需要任何其他變更。

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

隱藏警告的時機

隱藏此規則的警告並不安全。

另請參閱