2009-09-18 2 views
10

https://msdn.microsoft.com/en-us/library/ms182161.aspxЯвляется ли класс NativeMethods обработанным специально в .NET?

Существуют ли три класса, описанные в этом paged, специально обработанные в .NET Framework? (NativeMethods, SafeNativeMethods и UnsafeNativeMethods)

Причина, по которой я спрашиваю, - мне интересно, можно ли создавать категории классов NativeMethods. Например:

ComNativeMethods 
User32NativeMethods 
OleStorageNativeMethods 

ответ

7

Это соглашение, а не требование. Если вы задумаетесь над CLR и посмотрите код там, вы часто увидите код P/Invoke внутри класса NativeMethods. Я считаю, что FxCop порекомендует поместить ваш код P/Invoke в такой класс, если он встретится с ним.

1

Они не обрабатываются специально CLR. Рекомендуется использовать P/Invokes внутри класса с именем NativeMethods, SafeNativeMethods или UnsafeNativeMethods.

Вы увидите, что эта рекомендация вступает в игру, если вы запускаете FxCop на своих сборках.

2

Это просто соглашение, что говорит, что вы должны поместить р/вызова методов в классах по имени * NativeMethods, но нет никаких технических ограничений, чтобы помешать вам делать это по-своему ...

2

Вы можете назвать свои классы таким образом, но вы продолжите получать предупреждение CA1060 о анализе кода. Это предупреждение указывает, что вы не соблюдаете соглашение. Поэтому, чтобы предотвратить это предупреждение, вам нужно следовать соглашению, когда классы именования имеют методы P/Invoke. Если вы хотите классифицировать свои методы P/Invoke, вы можете использовать пространства имен. Например:

  • MyProject.Com.NativeMethods
  • MyProject.User32.NativeMethods
  • MyProject.OleStorage.NativeMethods
+0

Моя интерпретация этой связи является то, что это соглашение, а не о том, что runtime делает что-то другое. Разработчик несет ответственность за размещение соответствующих атрибутов безопасности для классов. Например: «NativeMethods - этот класс не запрещает выполнение стеков для неуправляемого кода. (System.Security.SuppressUnmanagedCodeSecurityAttribute не следует применять к этому классу.)« –

+0

Также уместно: «Эти классы похожи на класс NativeMethods, однако они отмеченный с помощью специального атрибута SuppressUnmanagedCodeSecurityAttribute.Когда этот атрибут применяется, среда выполнения не выполняет полный стек, чтобы убедиться, что все вызывающие лица имеют разрешение UnmanagedCode.Среда выполнения обычно проверяет это разрешение при запуске ... Однако, вы должны использовать этот атрибут с большой осторожностью. Это может иметь серьезные последствия для безопасности, если оно выполнено неправильно ». –

+0

Спасибо, я стою исправлено. Я обновил свой ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^