¿Cómo reservar interfaces al empaquetar un programa C en una biblioteca .so?
Las definiciones de interfaz que deben conservarse se denominan funciones globales (funciones no estáticas).
En primer lugar, la interfaz de la biblioteca es esencialmente la función definida en la biblioteca que se puede llamar desde el exterior.
En segundo lugar, a excepción de las funciones estáticas modificadas estáticamente, otros archivos pueden llamar a otras funciones, es decir, cualquier función no estática se puede llamar como una interfaz de una DLL.
En tercer lugar, para que los desarrolladores que utilizan la biblioteca comprendan la definición de la interfaz y cómo llamarla, fluent escribirá un archivo de encabezado o un conjunto de archivos de encabezado (.h) que contengan el siguiente contenido:
1. Declaración de todas las funciones utilizadas para llamadas externas. Incluye el nombre de la función, el valor de retorno y la lista de cotizaciones.
2. Si hay estructuras de datos personalizadas para uso externo, como enumeraciones, ****usuarios, estructuras, etc., también deben definirse en el archivo de encabezado.
3. Se recomienda agregar comentarios al archivo de encabezado para explicar el significado de las comillas para cada función, el tipo de llamada y el significado del valor de retorno. Cómo empaquetar una biblioteca de enlaces dinámicos en C++/CLI
1. Empaquetar una biblioteca de enlaces dinámicos
Primero abra VS2010 y cree un nuevo proyecto win32 (llamado maopao aquí. Seleccione DLL como). el tipo de aplicación y haga clic directamente en Finalizar.
El siguiente es el código:
Ver el código
Después de la compilación y ejecución, maopao.lib y maopao.dll se pueden generar en el directorio de depuración
En este punto, la biblioteca de enlaces dinámicos de clasificación de burbujas está completa.
2. Llame a la biblioteca de enlaces dinámicos
A continuación debemos considerar cómo llamar a
o crear una nueva aplicación de consola en VS2010 y agregar la primera Importar el archivos de biblioteca generados en un paso en el proyecto
Introducción:
Proyecto->Propiedades->Enlazador->General->Directorio de biblioteca adicional Agregar directorio de biblioteca
Proyecto->Propiedades->Enlazador->Entrada->Dependencias adicionales Agregar nombre de biblioteca ¿Puede encapsular la funcionalidad de SignalR en una biblioteca de vínculos dinámicos?
Inicie Visual Studio 2010
Nuevo proyecto: Archivo " Nuevo" proyecto
Seleccione Visual c++ "Proyecto Win32", ingrese el nombre del proyecto, seleccione el directorio de almacenamiento, haga clic en el botón "Aceptar"
Ingrese al asistente de la aplicación Win32, haga clic en Haga clic en Botón "Siguiente"
Seleccione DLL como tipo de aplicación, seleccione un proyecto vacío para las opciones adicionales y haga clic en el botón "Finalizar"
Agregue un nuevo tipo de archivo de encabezado: Derecha -haga clic en el encabezado del directorio de archivos del proyecto y luego haga clic en "Nuevo elemento"
Para la plantilla instalada, seleccione Visual C++, Archivos de encabezado, luego ingrese el nombre del archivo y luego haga clic en el botón "Agregar". . Botón Agregar
Para agregar una nueva categoría de archivos sin formato: haga clic con el botón derecho en el directorio de archivos sin formato del proyecto, haga clic en Agregar, Nuevo elemento
Para las plantillas instaladas, seleccione Visual C++, seleccione C++ archivo, ingrese el nombre del archivo y haga clic en el botón Agregar
Para las plantillas instaladas, seleccione Visual C++, seleccione el archivo C++, ingrese el nombre del archivo y haga clic en Agregar ". Haga clic en el botón Nuevo
para agregar contenido nuevo para una nueva categoría.
El contenido es el siguiente:
Archivo de encabezado simpleDLL.h:
Archivo original simpleDLL.cpp:
El lenguaje C se encapsula en una biblioteca de enlaces dinámicos y se trasplanta. a C#. ¿Con qué se ocupan los indicadores de función de llamada?
¿Puedo usarlo? Sé que C# no puede usar contenedores de C directamente, ¿verdad? Compruebe si hay algún código de programa similar. Funciones de declaración e implementación de la biblioteca de enlaces dinámicos de C++ Cómo crear una biblioteca de enlaces dinámicos
Uso de la biblioteca de enlaces dinámicos, llamada dinámica de la biblioteca de enlaces dinámicos (también llamada llamada explícita). ) Se puede utilizar, pero las llamadas estáticas (también conocidas como llamadas implícitas) son raras.
(1) Primero, revisemos la diferencia entre biblioteca de vínculos dinámicos y biblioteca de vínculos estáticos.
Biblioteca de vínculos estáticos: las funciones lib no solo están vinculadas, sino que todas las implementaciones se incluyen directamente en el final generado En el archivo EXE, solo la implementación es invisible.
Biblioteca de enlaces dinámicos: los archivos DLL no tienen que incluirse en el EXE final. Solo los nombres de funciones o nombres de variables o nombres de clases están vinculados al archivo EXE de forma estática. solo se recuperan durante la ejecución. La biblioteca de enlaces dinámicos se importa al archivo ejecutable y se puede hacer referencia dinámicamente y descargar directamente en el archivo DLL mediante llamadas dinámicas cuando se ejecuta el archivo EXE.
Al mismo tiempo, las bibliotecas estáticas no pueden contener otras bibliotecas dinámicas o estáticas, mientras que las bibliotecas dinámicas pueden contener otras bibliotecas dinámicas o estáticas.
(2) Revise las bibliotecas de enlaces dinámicos admitidas por VC++:
La compilación de bibliotecas de enlaces dinámicos no tiene nada que ver con el lenguaje de programación específico y se pueden encontrar bibliotecas de enlaces dinámicos. En todas partes, y VC ++ admite tres tipos de bibliotecas de vínculos dinámicos: biblioteca de vínculos dinámicos que no es MFC, biblioteca de vínculos dinámicos basada en reglas MFC y biblioteca de vínculos dinámicos del conjunto de extensiones MFC. La biblioteca de enlaces dinámicos exporta funciones (o variables o clases) que el programa de aplicación puede llamar; las funciones internas de la biblioteca de enlaces dinámicos solo se pueden utilizar en el programa de la biblioteca de enlaces dinámicos. Las aplicaciones pueden llamar a las funciones exportadas de DLL (o variables, clases); las funciones internas de DLL solo se pueden usar en programas DLL y las aplicaciones no pueden llamarlas.
(3) Cómo declarar una función receptora:
Un método es agregar "_declspec(dllexport)" entre el tipo de declaración de función y el nombre de la función.
La otra es declarar usando un archivo de definición de módulo (.def), lo que requiere agregar un nuevo archivo de módulo al proyecto de biblioteca con el siguiente formato:
nombre del proyecto de biblioteca LIBRARY
EXPORTACIONES nombre de la función de exportación
(4) Método de llamada de DLL:
Llamada estática, el sistema de compilación completa la carga y descarga de la DLL al final del solicitud.
Llamada dinámica, el programador utiliza funciones API para cargar y descargar DLL (carga de DLL-adquisición de dirección de función DLL-liberación de DLL).
El siguiente paso es escribir un ejemplo que ponga en práctica toda la teoría anterior.
Primero, cree una biblioteca de vínculos dinámicos (DLL de regla MFC) en la función ----
1. Nuevo--Proyecto--MFC AppWizard (dll)--Utilice un archivo llamado DLL de regla DLL MFC compartida de MFC_dll
2. Nuevo archivo def: nombre de la función (Add_new)
3.h nuevo archivo: declara la función externa de la función de suma, el nombre de la función es Add_new
extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b);
4. Nuevo en el paquete comprimido cpp: implementación de función externa
externo "C" __declspec(dllexport) int __stdcall Add_new(int a,int b)
{
return a+b;
}
5.build - establecer configuración activa - lanzamiento de win32 - ok
6. build
7. carpeta de lanzamiento en el directorio raíz La dll, lib y h en el directorio raíz son todos necesarios
2. Función----Llame a la biblioteca de enlaces dinámicos (coloque MFC_dll.dll y MFC_dll.dll y MFC_dll.lib en el directorio del proyecto)
Llamada estática (.h se puede escribir en un archivo .cpp)
1. nuevo--proyectos--aplicación de consola win32--un proyecto vacío
p>2. Agregue un nuevo archivo h: (test. h)
#pragma ment(lib, "MFC_dll.lib") le dice al compilador la ruta y el nombre del archivo lib correspondiente a la DLL p>
extern "C" _declspec(dllimport) int _stdcall Add_new(int a,int b); Declarar función receptor
3. Agregue un nuevo archivo cpp: (main.cpp)
#include "test.h"
int main()
{
cout< devuelve 0; } Llamada dinámica #include #include < windows. h>