Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo escribir DLL en C?

¿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

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!

上篇: Compartir código fuente del marco de desarrollo2023 llegará pronto. Este es mi quinto año trabajando en Alibaba. Hasta ahora, he estado profundamente involucrado en el campo de Android y tengo muy clara la dirección de la reforma y la innovación tecnológicas. El desarrollo de Android ha capturado rápidamente los corazones de las personas con sus ventajas de belleza, velocidad, eficiencia y apertura. Sin embargo, los materiales de aprendizaje avanzados que necesitan muchos entusiastas de Android no son lo suficientemente sistemáticos y completos. Este artículo es mi último resumen de algunos conocimientos avanzados sobre Android. Cubre una amplia gama de conocimientos, pero todos son puntos de conocimiento y puntos extra que casi a menudo se preguntan en las entrevistas. ¡En esta era de pagar por el conocimiento, la mejora de conocimientos y habilidades es fundamental! Compartiré este material de aprendizaje aquí con la esperanza de ayudar a las personas necesitadas. El siguiente es un conjunto completo de materiales de aprendizaje para arquitectos de desarrollo móvil que pasé dos meses compilando. ¡Por favor, guárdalos! ¡Haga clic en la tarjeta a continuación para ver cómo obtener el PDF completo! El arquitecto de un conjunto completo de notas de estudio de la serie Android debe tener las habilidades necesarias para construir las bases. Comprenda las anotaciones genéricas de Java de forma sencilla. Programación concurrente transmisión y serialización de datos Principio de máquina virtual Java IO eficiente Análisis de código fuente del marco top 100 de Android Análisis de código fuente Retrofit2.0 Análisis de código fuente Okhttp3 Análisis de código fuente ButterKnife Análisis de código fuente MPAndroidChart Análisis de código fuente Glide Lea. Análisis del código fuente de Kcanary Análisis del código fuente de Universal-image-Loader Análisis del código fuente de EventBus3.0 Análisis del código fuente de zxing Análisis del código fuente de Picasso Uso de Lottie Android explicación detallada y análisis del código fuente Análisis del código fuente de Fresco: proceso de carga de imágenes Optimización del rendimiento de Android análisis práctico para desarrollar una APLICACIÓN El propósito esencial es servir a los usuarios, por lo que, sobre la base de funciones poderosas, qué APLICACIÓN tiene un rendimiento más estable y una mejor experiencia se ha convertido en el factor principal para que los usuarios elijan. La optimización del rendimiento es un proceso continuo y una habilidad esencial para los ingenieros de desarrollo de Android. En esta parte, analizaré la optimización del rendimiento a partir de casos reales de fabricantes de Internet de primera línea, encontraré y resolveré problemas en combates reales y me familiarizaré con problemas comunes de optimización del rendimiento. Tencent Bugly: una pequeña comprensión del algoritmo de coincidencia de cadenas iQiyi: solución de captura de fallas de la aplicación de Android-XCRASH ByteDance: comprensión profunda de uno de los marcos de Gradle: complemento, extensión, tecnología BuildRCC Baidu APP: práctica de optimización de la primera pantalla de Android H5 Cliente Alipay Análisis de arquitectura: optimización de la velocidad de inicio del cliente Android "recolección de basura" Ctrip: práctica de arquitectura de componentes del proyecto Zhixing Android NetEase News Optimización de compilación: cómo hacer que su velocidad de compilación sea "relámpago" Kotlin, como nuevo lenguaje de programación funcional, es más seguro y conciso , versátil, interoperable y muchas otras ventajas, ya sea que se use para el desarrollo de Android o Java, Kotlin puede reducir una gran cantidad de código y mejorar en gran medida la eficiencia del trabajo. Actualmente, muchas empresas han abandonado Java y han cambiado a Kotlin, y todas tienen requisitos más altos para el lenguaje Kotlin en la contratación. 下篇: ¿Cómo resolver el problema de la matriz fuera de límites?