开发者

Where to put DllImport?

开发者 https://www.devze.com 2023-03-07 15:12 出处:网络
static class Class { public static void methodRequiringStuffFromKernel32() { // code here... } } Where do I put [DllImport(\"Kernel32.dl开发者_如何学Gol\")] here?You put it on the method you\'re im
static class Class    
{
    public static void methodRequiringStuffFromKernel32()
    {
        // code here...
    }
} 

Where do I put [DllImport("Kernel32.dl开发者_如何学Gol")] here?


You put it on the method you're importing from Kernel32.dll.

For example,

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

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

From @dtb: Note that the class should be named NativeMethods, SafeNativeMethods or UnsafeNativeMethods. See Naming Convention for Unmanaged Code Methods for more details.

CA1060: Move P/Invokes to NativeMethods class:

  • NativeMethods - This class does not suppress stack walks for unmanaged code permission. (System.Security.SuppressUnmanagedCodeSecurityAttribute must not be applied to this class.) This class is for methods that can be used anywhere because a stack walk will be performed.

  • SafeNativeMethods - This class suppresses stack walks for unmanaged code permission. (System.Security.SuppressUnmanagedCodeSecurityAttribute is applied to this class.) This class is for methods that are safe for anyone to call. Callers of these methods are not required to perform a full security review to make sure that the usage is secure because the methods are harmless for any caller.

  • UnsafeNativeMethods - This class suppresses stack walks for unmanaged code permission. (System.Security.SuppressUnmanagedCodeSecurityAttribute is applied to this class.) This class is for methods that are potentially dangerous. Any caller of these methods must perform a full security review to make sure that the usage is secure because no stack walk will be performed.


This is an example of 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);
  }
}

I suggest you to study Platform Invoke Tutorial.


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

}

It goes on the method itself that's P/Invoking outside methods. Make sure to add a reference to System.Runtime.InteropServices

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号