static class Class
{
public static void methodRequiringStuffFromKernel32()
{
// code here...
}
}
Where do I put [DllImport("Kernel32.dll")]
here?
static class Class
{
public static void methodRequiringStuffFromKernel32()
{
// code here...
}
}
Where do I put [DllImport("Kernel32.dll")]
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