C#中的NativeMethods类有什么作用?

时间:2012-10-05 08:03:16

标签: c# pinvoke native-methods

  

可能重复:
  Is the class NativeMethods handled specially in .NET?

我正在开发一个C#项目,它为一些功能提供了一些非托管C ++代码。我发现了fxCop,它抱怨我从非托管库中包含函数的方式。

它建议使用下面解释的NativeMethods类之一:

http://msdn.microsoft.com/en-us/library/ms182161%28v=vs.80%29.aspx

我读过它,但我不能说我理解它到底是做什么以及使用它有什么好处。如果有人能够解释“这个类不会抑制非托管代码允许的堆栈遍历”的含义,我会非常高兴。和“此类禁止堆栈遍历非托管代码权限。”

编辑:我真正想知道它是如何影响我的代码的。我已经阅读了它在MSDN上所说的内容,显然这对某些人来说已经足够了解,但对我来说理解得太高了。这就是为什么我要求一些细节。

1 个答案:

答案 0 :(得分:1)

本文的Visual Studio 2012版本包含更多解释,

http://msdn.microsoft.com/en-us/library/ms182161(v=vs.110).aspx

  

要修复违反此规则的问题,请将方法移至相应的位置   NativeMethods类。对于大多数应用程序,将P / Invokes移动到新的   名为NativeMethods的类就足够了。

     

但是,如果您正在开发用于其他库的库   应用程序,您应该考虑定义其他两个类   称为SafeNativeMethods和UnsafeNativeMethods。这些课程   类似于NativeMethods类;但是,它们的标记是使用a   名为SuppressUnmanagedCodeSecurityAttribute的特殊属性。什么时候   应用此属性后,运行时不会执行完整堆栈   步行以确保所有调用者都具有UnmanagedCode权限。   运行时通常在启动时检查此权限。因为   检查没有执行,它可以大大提高性能   调用这些非托管方法,它还启用了具有的代码   调用这些方法的权限有限。

     

但是,您应该非常谨慎地使用此属性。它可以有   如果实施不当,会产生严重的安全隐患。

     

有关如何实现这些方法的信息,请参阅   NativeMethods示例,SafeNativeMethods示例和   UnsafeNativeMethods示例。