¿Cómo escribir DLL en C?
Para crear su propia
biblioteca de enlaces dinámicos, primero debe conocer las categorías de DLL en VC5.0. VC admite tres tipos de DLL, que son:
1.Dlls no MFC
2.Dlls regulares
3.Dlls de extensión Nota: La traducción es redactado de manera inapropiada, por lo tanto, la terminología encontrada se refiere a la palabra original
DLL no MFC: se refiere a una DLL escrita directamente en lenguaje C sin utilizar la estructura de la biblioteca de clases MFC, y su función de salida es una p>
Generalmente se utiliza la interfaz C estándar y puede ser llamada por aplicaciones que no sean MFC o escritas en MFC. LL,
DLL normal: al igual que las DLL de extensión que se describen a continuación, se escribe utilizando la biblioteca de clases MFC. La característica obvia es que
Existe una clase que hereda CWinApp en el archivo fuente. Se puede subdividir en conexión estática a MFC y conexión dinámica a MFC
. Sin embargo, la biblioteca de vínculos dinámicos que está vinculada estáticamente a MFC solo es compatible con las versiones profesional y empresarial de VC.
DLL de extensión: se usa para reutilizar clases heredadas de MFC, es decir, usar este tipo de biblioteca de enlaces dinámicos
se puede usar para generar una Clase heredada de MFC. La DLL de extensión se crea utilizando la versión vinculada dinámicamente de MFC y solo la llaman aplicaciones escritas con la biblioteca de clases MFC.
Si te sientes un poco deslumbrado o mareado después de leer esto, no te desanimes, léelo dos veces y luego continúa leyendo.
Definitivamente ganarás algo.
Título: Acerca de la programación de DLL en VC [1]
Esta sección presenta cómo escribir archivos DLL que no sean MFC. El siguiente es un
método de escritura común:
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,
LPVOID lpReserved)
{
cambiar( ul_reason_for_call ) {
caso DLL_PROCESS_ATTACH:
.....
caso DLL_THREAD_ATTACH:
.......
caso DLL_THREAD_DETACH:
.....
caso DLL_PROCESS_DETACH:
... ....
}
return TRUE;
}
Cada DLL debe tener un punto de entrada, esto es igual que la aplicación. programa que escribimos en C,
Debe haber una función WINMAIN.
En este ejemplo, DllMain es una función de entrada predeterminada. No necesita escribir su propia
función de entrada DLL y declararla con el parámetro /ENTRY de la línea de comando del vinculador. El uso de esta función de entrada predeterminada puede garantizar que la biblioteca de enlaces dinámicos se inicialice correctamente cuando se llama. Por supuesto, no debe completar el código que bloquea el sistema durante la inicialización.
Entre los parámetros, hMoudle es un identificador que apunta a sí mismo y que se pasa cuando se llama a la biblioteca dinámica
(En realidad, es un selector que apunta al segmento _DGROUP)
p>
ul_reason_for_call es un indicador que indica el motivo por el cual se llamó a la biblioteca dinámica. Cuando un proceso o hilo
carga o descarga una biblioteca de vínculos dinámicos, el sistema operativo llama a la función de entrada y explica el motivo por el cual se llama a la biblioteca de vínculos dinámicos
. Todos sus valores posibles son:
DLL_PROCESS_ATTACH: Se llama al proceso
DLL_THREAD_ATTACH: Se llama al hilo
DLL_PROCESS_DETACH: Se detiene el proceso
DLL_THREAD_DETACH: El hilo está detenido
lpReserved es un parámetro reservado por el sistema.
La función de entrada ha sido escrita y no es difícil descargarla. Puede agregar las funciones o variables o clases C que desee generar en el archivo
o. Parece que hay demasiadas diferencias. ¡Mira aquí! Ahora
es el momento de agregar una nueva función de salida:
void _declspec(dllexport) JustSoSo()
{
MessageBox(NULL, "¡Es tan fácil!", "Jajaja...", MB_OK
}
También puedes generar una clase, de la siguiente manera: < /p); >
class _declspec(dllexport) Fácil
{
//agrega tu definición de clase...
}; Debes haber notado que uso _declspec(dllexport) al generar funciones o clases.
Esta es una palabra clave proporcionada por VC, que se puede usar para generar datos en la biblioteca de enlaces dinámicos.
Una función o una clase. Usar esta palabra clave puede ahorrarle muchos problemas. No es necesario que explique en el archivo .DEF
que quiero generar esta clase y esa función.
¡Ok! Intenta seguir el ejemplo anterior y verás: ¡Muy fácil!
¡Eso es todo por ahora!