分享方式:


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

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

原因

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

隱藏警告的時機

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

另請參閱