How to use [DllImport("")] in C#?

I found a lot of questions about it, but no one explains how I can use this.

I have this:

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; using Microsoft.FSharp.Linq.RuntimeHelpers; using System.Diagnostics; using System.Runtime.InteropServices; using System.IO; public class WindowHandling { public void ActivateTargetApplication(string processName, List<string> barcodesList) { [DllImport("User32.dll")] public static extern int SetForegroundWindow(IntPtr point); Process p = Process.Start("notepad++.exe"); p.WaitForInputIdle(); IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); IntPtr processFoundWindow = p.MainWindowHandle; } } 

Can someone help me to understand why it gives me an error on the DllImport line and on the public static line?

Does anyone have an idea, what can I do? Thank you.

3

2 Answers

You can't declare an extern local method inside of a method, or any other method with an attribute. Move your DLL import into the class:

using System.Runtime.InteropServices; public class WindowHandling { [DllImport("User32.dll")] public static extern int SetForegroundWindow(IntPtr point); public void ActivateTargetApplication(string processName, List<string> barcodesList) { Process p = Process.Start("notepad++.exe"); p.WaitForInputIdle(); IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); IntPtr processFoundWindow = p.MainWindowHandle; } } 
2

Starting with C# 9, your syntax would be valid if you remove the public keyword from the SetForegroundWindow deceleration:

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; using Microsoft.FSharp.Linq.RuntimeHelpers; using System.Diagnostics; using System.Runtime.InteropServices; using System.IO; public class WindowHandling { public void ActivateTargetApplication(string processName, List<string> barcodesList) { [DllImport("User32.dll")] static extern int SetForegroundWindow(IntPtr point); Process p = Process.Start("notepad++.exe"); p.WaitForInputIdle(); IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); IntPtr processFoundWindow = p.MainWindowHandle; } } 

In C# 9 local functions can have attributes, see here

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like