Herramientas de usuario

Herramientas del sitio


highlevel:c:advancing

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
highlevel:c:advancing [2008/05/28 18:33]
alfred
highlevel:c:advancing [2020/05/09 09:25] (actual)
Línea 249: Línea 249:
 [[code:​tools#​tips_creando_bibliotecas|Tips para crear bibliotecas desde Visual Studio]] [[code:​tools#​tips_creando_bibliotecas|Tips para crear bibliotecas desde Visual Studio]]
  
-==== Crear una biblioteca (Windows) ==== + 
-Cuando ​se va a utilizar una librería dinámica en un programa es necesario que se proporcionen dos archivos, un .h (mediante un #include) y un .lib (esta debe ser vinculada desde el compilador),​ en el primero estará el código de dicha biblioteca y en el segundo un mapeo al archivo .dll. \\ + 
 + 
 + 
 + 
 +==== Crear y utilizar ​una biblioteca (Windows) ==== 
 +Compilar una biblioteca estática no tiene problema alguno, se hace como si de un ejecutable normal se tratase sólo que el resultado es un archivo .lib, este ha de vincularse al proyecto y será si el código fuente estubiese en él. Debes hacer un ''#​include''​ de los .h correspondientes,​ pero estos no han de tener nada especial, simplemente han de ser copiados ahí. \\  
 +En cambio, cuando ​se va a utilizar una librería dinámica en un programa es necesario que se proporcionen dos archivos, un .h (mediante un #include) y un .lib (esta debe ser vinculada desde el compilador),​ en el primero estará el código de dicha biblioteca y en el segundo un mapeo al archivo .dll. \\ 
 Al crear la librería hay que tener en cuenta las siguientes cosas: Al crear la librería hay que tener en cuenta las siguientes cosas:
   * En el archivo .h del código correspondiente a la biblioteca añadiremos ''<​nowiki>​extern "​C"​ _declspec(dllexport)</​nowiki>''​ antes de cada función que queramos que sea utilizable en la biblioteca.   * En el archivo .h del código correspondiente a la biblioteca añadiremos ''<​nowiki>​extern "​C"​ _declspec(dllexport)</​nowiki>''​ antes de cada función que queramos que sea utilizable en la biblioteca.
Línea 299: Línea 305:
 }; };
 </​code>​ </​code>​
 +  * Para definir las funciones a exportar en una dll podemos utilizar también un fichero .def.
  
-==== Palabra clave extern ==== +=== DllMain ​=== 
-La palabra clave ''​extern''​ indica al compilador que el dato que se está definiendo existe en algún lugar del código ​(más abajoen un fichero externo...), pero que es posible que todavía no se haya compilado esa parte.+Una dll al iniciarse llama a una función "​main"​ de esta, nosotros podemos escribirla si seguimos la siguiente sintaxis: ​''​BOOL WINAPI DllMain(HINSTANCE hInstanceDWORD dwReason, LPVOID)''​.
 <code cpp> <code cpp>
-extern int i;  +... 
-extern void func(); +BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID) { 
-int main() { + std::cout << ​"Dll inicializada"​ << std::​endl;​ 
-  i = 0; + return TRUE;
-  func(); +
-+
-int i;  +
-void func() { +
-  i++; +
-  ​cout << ​i;+
 } }
 +...
 </​code>​ </​code>​
 +
 +
 +
 +
 +
 +
 +===== [More] Effective C++ =====
 +  * [[highlevel:​c:​effective|[More] Effective C++]]
highlevel/c/advancing.1211999630.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)