- PR -

[C# VS2005] CA1060警告の修正方法

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-08-25 12:54
構文解析結果(CA1060)の修正方法を教えてください。
エラーのヘルプ表示も見ましたが、内容が理解できず
修正方法が分かりませんでした。


// ソースコード

using System.Runtime.InteropServices;
namespace DesignLibrary
{
public abstract class UnmanagedApi
{
/// <summary>
/// ビープ音を指定msec間鳴らす
/// </summary>
/// <param name="freq 音の高さ(周波数 Hz)"></param>
/// <param name="duration 長さ(msec)"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool Beep(int freq, int duration);
}
}

// 警告内容

// 警告 CA1060 : Microsoft.Design : UnmanagedApi.Beep(Int32, Int32):Boolean は DllImport メソッドであるため、NativeMethod、SafeNativeMethod または UnsafeNativeMethod に名前指定されたクラスで定義しなければなりません。 C:\Documents and Settings\daicel\My Documents\作業中\反転切り出し 1.0\WindowsApplication1\DaicelCorp-Sound.cs 14 Compile
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-08-25 13:01
ヘルプの意味があまりよくわかっていませんが、
コード:
internal sealed class UnmanagedApi
{
    private UnmanagedApi(){}


こんな感じ?
internal static クラスでもいけるのかな?
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-25 13:17
そのままで何ら問題ないように思いますけど...

コード:

    using System.Runtime.InteropServices;

    namespace DesignLibrary {
        public abstract class UnmanagedApi {
            [DllImport("kernel32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            internal static extern bool Beep(int freq, int duration);
        }
    }


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-08-25 16:12
ひろしさん、こんにちは。

これ、デザイン ガイドラインに準拠していない場合に、コード分析ツールが出す警告ですよね?
単に、このメソッドを定義するクラスの名前を、「NativeMethod、SafeNativeMethod または UnsafeNativeMethod」の何れかにしなさい、という事ではありませんか?
#当方の環境は for Software Architects なので、検証出来ません…。

【追記】

コードアクセスセキュリティの実践という文書の、名付け規則を使用してリスクを示すという項に、それらしい説明を見つけました。


[ メッセージ編集済み 編集者: きくちゃん 編集日時 2006-08-25 16:44 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-08-25 20:05
>きくちゃん

ビンゴです。その通りにしたら見事コード分析成功でした。
名前付けを分析するとは…。

SafeNativeMethods クラスの場合は、シールクラスにしなければならない等も分析してくれるようです。
_________________
囚人のジレンマな日々
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2006-08-28 12:34
ご回答ありがとうございます。
クラス名をNativeMethodsに修正することで警告を抑制できました。

using System.Runtime.InteropServices;
namespace DaicelCorp.Sound
{
// 修正箇所
public abstract class NativeMethods
{
/// <summary>
/// ビープ音を指定msec間鳴らす
/// </summary>
/// <param name="freq 音の高さ(周波数 Hz)"></param>
/// <param name="duration 長さ(msec)"></param>
/// <returns></returns>
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool Beep(int freq, int duration);
}
}
1

スキルアップ/キャリアアップ(JOB@IT)