Hola, tengo una pregunta sobre la llamada de archivos dll. El archivo dll generado por C++ es llamado por C#.
Primero, el método externo debe declararse en forma básica en el programa fuente del lenguaje C#:
[DLLImport("archivo DLL")]< / p>
El modificador extern devuelve el nombre del método de tipo variable (lista de parámetros)
Dónde:
Archivo DLL: contiene el archivo de biblioteca que define el método externo.
Modificadores: Modificadores de acceso que se pueden utilizar al declarar métodos (excepto abstractos).
Tipo de variable de retorno: el tipo de variable de retorno del método que debe llamarse en el archivo DLL.
Nombre del método: El nombre del método que se llamará en el archivo DLL.
Lista de parámetros: una lista de métodos que necesita llamar en el archivo DLL.
Nota: Debe utilizar el espacio de nombres System.Runtime.InteropServices en la declaración de su programa.
DllImport solo se puede colocar en declaraciones de métodos.
El archivo DLL debe estar ubicado en el directorio actual del programa o en la ruta de consulta definida por el sistema (es decir, la ruta establecida por Ruta en la variable de entorno del sistema).
El tipo de variable de retorno, el nombre del método y la lista de parámetros deben coincidir con los definidos en el archivo DLL.
Para usar otro nombre de función, puede usar la propiedad EntryPoint para configurarlo, por ejemplo:
[DllImport("user32.dll", EntryPoint="MessageBoxA")]
static extern int MsgBox(int hWnd, string msg, string caption, int type);
Otros atributos opcionales de DllImportAttribute:
CharSet representa los caracteres a utilizarse en el conjunto de puntos de entrada, por ejemplo CharSet=CharSet. SetLastError indica si el método conserva el "último error" de Win32, como SetLastError=true;
ExactSpelling indica si EntryPoint debe coincidir exactamente con la ortografía del punto de entrada especificado, como ExactSpelling=false ; p>
PreserveSig Representa el conjunto de caracteres utilizado en el punto de entrada, como CharSet=CharSet, PreserveSig=true;
CallingConvention representa la convención de llamada del punto de entrada, por ejemplo, CallingConvention=CallingConvention. Winapi;
Además, para obtener más información sobre "Procesamiento de empaquetado de datos" y "Números de empaquetado y escalares lógicos", consulte los otros artículos [2].
Ejemplo de C#:
1. Inicie VS.NET y cree un nuevo proyecto con el nombre "Tzb" y la plantilla "Aplicación de Windows".
2. En el elemento "Windows Forms" de "Caja de herramientas", haga doble clic en el elemento "Botón" para agregar un botón al formulario "Form1". Agregue un botón al formulario "Form1".
3. Cambie las propiedades del botón: cambie el nombre a "B1", cambie el texto a "Usar el cuadro emergente DllImport para llamar a DLL" y ajuste el botón B1 al tamaño y tamaño apropiados. muévalo a la posición adecuada.
4. Haga doble clic en "Form1" en la vista de clases, abra la vista de código "Form1.cs" y escriba "using System.Runtime.InteropServices;" encima de "Namespace Tzb" para importar el espacio de nombres. .
5. Haga doble clic en el botón B1 en la vista "Form1.cs [Diseño]" y declare el método encima del método "B1_Click" usando las palabras clave static y extern. En "MsgBox", adjunte el atributo DllImport al método. Aquí necesitamos usar la función "MessageBoxA" en "user32.dll". El código específico es el siguiente:
[DllImport("user32. dll", EntryPoint="MessageBoxA")]static extern int MsgBox(int hWnd, string msg, string caption, int type);
Luego agregue el siguiente código en el método "B1_Click" para llamar el método "MessageBox":
MsgBox(0, "¡Este es el cuadro emergente que aparece cuando se usa DllImport para llamar a una DLL!", "Challenge Cup", 0x30
6. Presione "F5" para ejecutar el programa y haga clic en el botón B1 y aparecerá el siguiente cuadro emergente: