在哪里放DllImport?

时间:2011-05-20 19:27:27

标签: c# dllimport

static class Class    
{
    public static void methodRequiringStuffFromKernel32()
    {
        // code here...
    }
} 

我在哪里放[DllImport("Kernel32.dll")]

3 个答案:

答案 0 :(得分:13)

您将它放在从Kernel32.dll导入的方法上。

例如,

static class Class    
{
    [DllImport("Kernel32.dll")]
    static extern Boolean Beep(UInt32 frequency, UInt32 duration);

    public static void methodRequiringStuffFromKernel32()
    {
        // code here...
        Beep(...);
    }
}

来自@ dtb:请注意,该类应命名为NativeMethodsSafeNativeMethodsUnsafeNativeMethods。有关详细信息,请参阅Naming Convention for Unmanaged Code Methods

CA1060: Move P/Invokes to NativeMethods class

  
      
  • NativeMethods - 此类不会抑制非托管代码权限的堆栈遍历。 (System.Security.SuppressUnmanagedCodeSecurityAttribute不能应用于此类。)此类适用于可在任何地方使用的方法,因为将执行堆栈遍历。

  •   
  • SafeNativeMethods - 此类禁止堆栈遍历非托管代码权限。 (System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类。)此类适用于任何人都可以安全调用的方法。这些方法的调用者不需要执行完整的安全性审查,以确保使用是安全的,因为这些方法对任何调用者都是无害的。

  •   
  • UnsafeNativeMethods - 此类禁止堆栈遍历非托管代码权限。 (System.Security.SuppressUnmanagedCodeSecurityAttribute应用于此类。)此类适用于潜在危险的方法。这些方法的任何调用者都必须执行完整的安全性审查,以确保使用安全,因为不会执行堆栈遍历。

  •   

答案 1 :(得分:6)

这是DllImport的一个例子:

using System;
using System.Runtime.InteropServices;

class MsgBoxTest
{
  [DllImport("user32.dll")]
  static extern int MessageBox (IntPtr hWnd, string text, string caption,
                                int type);
  public static void Main()
  {
    MessageBox (IntPtr.Zero, "Please do not press this again.", "Attention", 0);
  }
}

我建议你学习Platform Invoke Tutorial

答案 2 :(得分:1)

static class Class    
{
    [DllImport("kerynel32.dll")]
    public static extern void methodRequiringStuffFromKernel32();

}

它继续使用P /调用外部方法的方法本身。请务必添加对System.Runtime.InteropServices

的引用