Cómo usar [DllImport(«»)] en C#?

He encontrado un montón de preguntas acerca de ella, pero nadie explica cómo puedo usar esto.

Tengo este:

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;
    }
}

Alguien me puede ayudar a entender por qué me da un error en el DllImport línea y en la public static línea?

¿Alguien tiene una idea, ¿qué puedo hacer?
Gracias.

  • Hay múltiples problemas en adición a lo @vcsjones ha mencionado. ¿Tienes User32.dll donde usted está usando este. Y también verificar el lugar donde se ha escrito el [DllImport] declaración.Su lugar equivocado.
  • User32.dll es un bonito estándar Win32 DLL que siempre estará en SysWow64 o System32, por lo que no debería ser un problema con la búsqueda de ella. Puede encontrar el mal si existe otro archivo DLL con el mismo nombre, que está «más cerca» en la secuencia de búsqueda, pero que iba a traer el desastre a la mayoría de los programas.
  • Ah ok, mi mal. Yo no era consciente.
InformationsquelleAutor ThomasFey | 2013-10-18

1 Kommentar

  1. 68

    Usted no puede declarar una extern método local dentro de un método, o cualquier otro método con un atributo. Mover el archivo DLL de la importación en la clase:

    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;
        }
    }
    • Además, debe usar System.Runtime.InteropServices en Microsoft Visual Studio
    • Además, debe usar System.Diagnostics con el fin de utilizar el objeto de Proceso

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea