Static Libraries


Static Library

It is a library that is statically linked. This library may contain functions (to keep happy those programmers that are not able to think using OOP), and classes that are ready to be used. In order to use the functions and classes of a static library, it is necessary to have a header files (*.h), and a lib file at the moment of compiling the program. The linker takes the appropriate code from the lib file and put it inside the executable file (*.exe). This implies that once the executable has been created, the lib file is not necessary during execution.
Es una librería enlazada en forma estática. Esta puede contener funciones (para mantener felices a los que no han podido pensar en POO) y clases listas para ser usadas. Para usar las funciones y classes contenidas en una librería estática se deben tener un archivo de encabezado (*.h) y un archivo de librería estática (*.lib) en el momento de la compilación. El linker (enlazador) toma el código del archivo lib y lo incrusta en el archivo ejecutable del proyecto (*.exe). Esto quiere decir que una vez creado el ejecutable, ya no se necesita el archivo lib para que el ejecutable corra.

Tip
Static libraries are useful because:
  • Allow reusing someone else's code
  • The library creator does not need to share the source code
  • It is possible to divide a complex project in libraries

Las librerías estáticas son útiles porque:
  • Permiter reusar el código de alguien más
  • El creador de la librería no necesita compartir su código fuente
  • Es posible dividir proyectos complejos en librerías

Problem 1
Create a project called MyOperLib that creates a static library to compute the mean.
Cree un proyecto llamado MyOperLib que cree una librería estática para calcular la media.

Step A
Open Microsoft Visual Studio New Project > Visual C++ > Windows Desktop > Windows Desktop Wizard. If you do not find the Windows Desktop Wizard, you may use Windows Desktop Application, and during the Wizard, select Static Library. Set the name and location of the project and press OK. You do not need to use Wintempla for this project.
Abra Microsoft Visual Studio New Project > Visual C++ > Windows Desktop > Windows Desktop Wizard. Si usted no encuentra Windows Desktop Wizard, usted puede usar Windows Desktop Application, y durante el asistente, seleccione Librería Estática. Fije el nombre y la ubicación del proyecto y presione OK. Usted no necesita usar Wintempla para este proyecto.

NewProject

Step B
The wizard will take you to some basic configuration steps. Select the static library option as shown below, and press the Finish button to terminate the wizard.
El asistente lo tomará a algunos pasos de configuración básicos. Seleccione la opción de librería estática como se muestra debajo y presione el botón de Finalizar para terminar el asistente.

StaticLibraryOption

Step C
Add the class called MyOper Project > Add Class > Visual C++ > C++ . Press the Add button, and set the class name to MyOper.
Agregue una clase llamada MyOper Project > Add Class > Visual C++ > C++ . Presione el botón de Agregar, y fije el nombre de la clase en MyOper.

classWizard

Step D
Edit the MyOper.h and MyOper.cpp files as shown.
Edite los archivos MyOper.h y MyOper.cpp como se muestra.

MyOper.h
class MyOper
{
public:
     MyOper(void);
     ~MyOper(void);
     void Add(double value);
     double GetMean();
private:
     double sum;
     int count;
};

MyOper.cpp
#include "stdafx.h"
#include "MyOper.h"

MyOper::MyOper(void)
{
     sum = 0.0;
     count = 0;
}

MyOper::~MyOper(void)
{
}

void MyOper::Add(double value)
{
     sum += value;
     count++;
}

double MyOper::GetMean()
{
     return sum/count;
}

Step E
Change your project configuration to Release using the Configuration Manager from the menu, and build your project. If you do not have any errors, the MyOperLib.lib file will be generated in the Release folder as shown. You are, now, ready to distribute your library; do not forget to also distribute the MyOper.h file.
Cambie la configuración de su proyecto al modo de Release usando el Configuration Manager desde el menú, y generé (build) su proyecto. Si usted no tiene errores, el archivo MyOpeLib.lib se generará en la carpeta de Release como se muestra. Usted esta, ahora, listo para distribuir su librería; no se olvide de también distribuir el archivo MyOper.h.

ReleaseFolder

Problem 2
Create a dialog Wintempla application called MyMean to use the static library created in the previous problem.
Cree una aplicación de diálogo usando Wintempla llamada MyMean para usar la librería estática creada en el problema previo.

Step A
Use Wintempla to edit the GUI as shown
Use Wintempla para editar la GUI como se muestra.

MyMeanGui

Step B
Copy the MyOper.h and MyOperLib.lib files from their respective current location to the MyMean project folder as shown.
Copie los archivos MyOper.h y MyOperLib.lib desde la ubicación respectiva y actual a la carpeta del proyecto MyMean como se muestra.

CopyLibFiles

Step C
Edit the MyMean.h and MyMean.cpp files as shown. Observe how the pragma command of the pre-processor is used to include the static library: MyOpenLib.lib. #pragma indicates to the linker to link the MyOperLib.lib file.
Edite los archivos MyMean.h y MyMean.cpp como se muestra. Observe como se usa el comando del pro-procesador pragma para incluir la librería estática MyOpenLib.lib. #pragma indica al enlazador enlazar el archivo MyOperLib.lib.

MyMean.h
#pragma once //______________________________________ MyMean.h
#include "Resource.h"
#include "MyOper.h"
#pragma comment(lib, "MyOperLib.lib")
class MyMean: public Win::Dialog
{
public:
     MyMean()
     {
     }
     ~MyMean()
     {
     }
     MyOper oper;
     ...
};

MyMean.cpp
#include "stdafx.h" //________________________________________ MyMean.cpp
#include "MyMean.h"

int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE , LPTSTR cmdLine, int cmdShow){
     MyMean app;
     return app.BeginDialog(IDI_MYMEAN, hInstance);
}

void MyMean::Window_Open(Win::Event& e)
{
}

void MyMean::btAdd_Click(Win::Event& e)
{
     const double value = tbxInput.DoubleValue;
     wstring text;
     Sys::Format(text, L"%f\r\n", value);
     tbxList.Text += text;
     oper.Add(value);
     tbxMean.DoubleValue = oper.GetMean();
     //_______________________________ Help the user
     tbxInput.Text = L"";
     tbxInput.SetFocus();
}

MyMeanRun

© Copyright 2000-2021 Wintempla selo. All Rights Reserved. Jul 22 2021. Home