我实现了这个功能:GetSystemPowerStatusEx& GetSystemPowerStatusEx2
根据MSDN上的这篇文章,我应该创建一个根据我将使用的函数命名的类,但我的问题是:我怎么知道我应该把哪个类放入GetSystemPowerStatusEx& GetSystemPowerStatusEx2?
我迷路了......
感谢您的帮助。
[编辑] 我的问题是:这三个类名中哪一个对我来说是好的(NativeMethods / SafeNativeMethods / UnsafeNativeMethods)?
这些方法应该属于以下类别之一:
NativeMethods - 此类没有 抑制堆栈走动为非托管 代码许可。 (System.Security.SuppressUnmanagedCodeSecurityAttribute 不得应用于此课程。) 这个类适用于可以的方法 因为堆栈走路而在任何地方使用 将会进行。
SafeNativeMethods - 这个类 抑制不受管理的堆栈遍历 代码许可。 (System.Security.SuppressUnmanagedCodeSecurityAttribute 适用于这个类。)这个类 适用于安全的方法 任何人打电话。这些来电者 方法不需要执行 完整的安全审查,以确保 使用是安全的,因为 方法对任何来电者都无害。
UnsafeNativeMethods - 这个类 抑制不受管理的堆栈遍历 代码许可。 (System.Security.SuppressUnmanagedCodeSecurityAttribute 适用于这个类。)这个类 适用于潜在的方法 危险的。这些方法的任何调用者 必须执行完整的安全审查 确保使用安全 因为没有堆栈走路 进行。
答案 0 :(得分:9)
这是一个非常愚蠢的警告,最终没有效果。但保持它的快乐很简单,只需在名为NativeMethods的项目中添加一个静态类,并将[DllImport]声明放入其中。不需要单独的课程。声明他们内部。
请注意,您无法在模拟器上调用这些函数,测试它们需要在设备上运行它。要使程序在模拟器中可调试,请确保使用#ifdef DEBUG包装调用它们的代码。
答案 1 :(得分:2)
只需将它们声明为静态类中的静态方法;这是标准方法。
编辑:与评论者指出的一样,它们也可以放在非静态类中。从本质上讲,只要你的Win32方法是带有DLLImport属性的静态extern,它们就可以在任何类中使用。
答案 2 :(得分:0)
将它们放在要将它们作为静态方法使用的类中,然后使用常规方法将它们包裹起来,这样你就不会打扰应用程序的其余部分,并认为存在一些外部因素。
我使用这种方法,它永远不会失败。
编辑:
检查出来:
http://pinvoke.net/search.aspx?search=GetSystemPowerStatusEx