¿Cómo crear una biblioteca de enlaces dinámicos?
1. Cree una biblioteca de vínculos dinámicos que no sea MFC
DLL
1. p>- gt;
Nuevo
-gt;
Opciones de proyecto, seleccione Win32
Dynamic-Link
Biblioteca
-gt;muestra
proyecto
-gt;Nombre del proyecto: DllDemo
2. un nuevo archivo .h DllDemo. h file DllDemo.h
El siguiente es el fragmento de referencia:
#ifdefDllDemoo_EXPORTS
#defineDllAPI__declspec(dllexport)
#else
#defineDllAPI__declspec(dllimport)
extern "C" // Compilar tal cual
{
DllAPIint__stdcallMax(inta, intb); //__stdcall usa lenguajes que no son C/C y puede llamar a API
}
#endif
3. Agregue el archivo DllDemo.h a DllDemo .cpp e implementar la función Max (int, int)
El siguiente es un fragmento de referencia:
#include "DllDemo.h"
DllAPIint__stdcallMax(inta , intb)
{
if(a==b)
returnNULL;
elseif(agt;b)
returna;
else
returnb;
}
4. Compile el programa para generar una biblioteca de enlaces dinámicos
2. Utilice la biblioteca de vínculos dinámicos para la creación de archivos .def DllDemo.dll.
1. Elimine el archivo DllDemo.h en el proyecto DllDemo.
2. En el archivo de encabezado del archivo DllDemo.cpp, elimine la instrucción
#include
DllDemo.h.
3. Agregue un archivo de texto llamado DllDemo.def al proyecto y escriba la siguiente declaración:
BIBLIOTECA
MyDll
EXPORTACIONES.
Max@1
4. Compile el programa para generar una biblioteca de enlaces dinámicos.
Pasos para llamar al enlace dinámico:
I. Llamada implícita
1.
Compilar el proyecto DllCnslTest
2.
Copie los archivos DllDemo.dll y DllDemo.lib al directorio donde se encuentra el proyecto DllCnslTest
3.
En DllDemo.dll y DllDemo. .lib Agregar biblioteca de vínculos dinámicos en .
Agregue la siguiente declaración en DllCnslTest.h:
El siguiente es un fragmento de referencia:
#defineDllAPI__declspec(dllimport)
# pragmacomment( lib, "DllDemo.lib") /// Cuando el editor vincula el archivo DllDemo.lib, vincula el archivo DllDemo.lib. Cuando el editor enlace, enlace al archivo lib
extern "C"
{
DllAPIint__stdcallMax(inta, intb);
}
4. Agregue el siguiente contenido a la declaración del archivo DllCnslTest.cpp:
El siguiente es el fragmento citado:
#include "DllCnslTest.h" // o #include "DllDemo.h"
voidmain()
{
intvalue;
value=Max(2, 9) ;
printf("TheMaxvalueisd
", valor);
}
5. Compile y genere la aplicación DllCnslTest. exe
Dos llamadas explícitas
1.
Construya el proyecto DllWinTest
2. DllDemo.dll se copia al directorio donde se encuentra el proyecto DllWinTest o al directorio del sistema de Windows.
3.
Utilice el pequeño programa Dumpbin.exe en vc/bin para ver la estructura de la función en el archivo DLL (DllDemo.dll).
4.
Utilice la palabra clave de definición de tipo typedef para definir un puntero al mismo prototipo de función en la DLL.
Ejemplo:
El siguiente es un fragmento de referencia:
typedefint(*lpMax)(inta, intb); //Esta declaración se puede colocar en . h
5.
Cargue la DLL en la aplicación actual a través de LoadLibray() y devuelva el identificador del archivo DLL actual del archivo DLL actual.
Ejemplo:
La siguiente es una referencia:
HINSTANCEhDll //Declarar el identificador del archivo de instancia Dll
hDll= LoadLibrary("DllDemo .dll"); //Importar biblioteca de vínculos dinámicos DllDemo.dll
6,
A través de la función GetLibray(), la DLL se carga en la aplicación actual y se devuelve el identificador del archivo DLL actual. p>
Obtenga el puntero de función de la aplicación importada a través de la función GetProcAddress().
Ejemplo:
El siguiente es un fragmento de referencia:
lpMaxMax;
Max=(lpMax)GetProcAddress(hDLL, "Max ") ;
intvalue;
value=Max(2,9);
printf("TheMaxvalueisd", valor);
7,
Después de llamar a esta función, use FreeLibrary() para descargar el archivo DLL.
FreeLibrary(hDll);
8.
Compilar y generar la aplicación DllWinTest.exe
Nota: Al compilar la aplicación, no es Utilice el archivo Lib correspondiente para enlaces explícitos.
Se recomienda comprar la "Serie de edición en lenguaje C" editada por el profesor Tan Haoqiang para fines de investigación.