Alex Rivera | Logout

Where to put DllImport?

Asked 2011-05-20T19:27:26.660
11
static class Class    
{
    public static void methodRequiringStuffFromKernel32()
    {
        // code here...
    }
} 

Where do I put [DllImport("Kernel32.dll")] here?

Edit
Report

2 Answers

14

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.

answered 2011-05-20T19:30:38.833
1
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

answered 2011-05-20T19:30:52.880

Your Answer