Анализ кода исправления CA1060 - PullRequest
6 голосов
/ 20 октября 2011

В моем приложении указан следующий код:

[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int index);

[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);

[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
               int x, int y, int width, int height, uint flags);

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, uint msg,
               IntPtr wParam, IntPtr lParam);

Я получаю следующее предупреждение от Code Analysis (FxCop):

CA1060: Microsoft.Design: поскольку это метод P / Invoke, 'IconHelper.GetWindowLong (IntPtr, int)' должен быть определен в классе именованные NativeMethods, SafeNativeMethods или UnsafeNativeMethods.

Может кто-нибудь сказать мне, в какой класс я должен их поместить? Я не знаю, является ли это Native, SafeNative или UnsafeNative.

Ответы [ 2 ]

9 голосов
/ 20 октября 2011

У вас есть подробная информация об этом предупреждении здесь: http://msdn.microsoft.com/en-us/library/ms182161.aspx. Вкратце:

Для большинства приложений достаточно переместить P / Invoces в новый класс с именем NativeMethods.

4 голосов
/ 25 июня 2015

Попробуйте переместить их всех в класс NativeMethod, это решит проблему

Ваш код должен выглядеть следующим образом после исправления

public class NativeMethods {
[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int index);

[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);

[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
               int x, int y, int width, int height, uint flags);

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, uint msg,
               IntPtr wParam, IntPtr lParam);
}

Не забудьте поменять все места, где вы вызываете эти методы

До изменения

SendMessage(IntPtr hwnd, uint msg,IntPtr wParam, IntPtr lParam)

должно быть

NativeMethods.SendMessage(IntPtr hwnd, uint msg,IntPtr wParam, IntPtr lParam)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...