CA1417: P/Invokes の文字列パラメーターに OutAttribute
を使用しません
プロパティ | 値 |
---|---|
ルール ID | CA1417 |
Title | P/Invoke の文字列パラメーターに OutAttribute を使用しないでください |
[カテゴリ] | 相互運用性 |
修正が中断ありか中断なしか | なし |
.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);
どのようなときに警告を抑制するか
この規則による警告は抑制できません。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET