Nuestra DLL contendrá dos funciones: La primera la llamaremos Suma y, obviamente, sumará dos valores
enteros que pondremos a su disposición. La segunda recibirá una cadena de caracteres y simplemente
reemplazará cada caracter de la cadena por una X, por lo que la denominaremos LlenaDeX.
A pesar de la simpleza de este ejemplo, lo importante aquí es concentrarnos en el procedimiento de creación
de la librería y su utilización desde el entorno de Visual Basic.
- En Visual C++, creamos un Nuevo Project Workspace.
En el cuadro de diálogo seleccionamos Type: MFC App Wizard (dll) y en el campo Name: ponemos Demo.
Al hacer click en el botón Create... el asistente nos mostrará un nuevo cuadro de diálogo
donde debemos seleccionar la opción Regular DLL with MFC statically linked y pulsar el botón Finish
para terminar.
Luego de unos instantes encontraremos que han sido creados varios archivos.
- Ubicamos el archivo principal del proyecto, llamado Demo.cpp y luego de las instrucciones dirigidas al preprocesador
(que comienzan con #) incorporamos el código que corresponde a cada procedimiento:
Archivo Demo.cpp
extern "C"
int WINAPI Suma(int dato1, int dato2)
{
int temp;
temp=dato1+dato2;
return (temp);
};
void WINAPI LlenaDeX(char* cadena, int largo)
{
char *puntero;
puntero=cadena;
for (int n=1;n=largo;n++)
{
*puntero='X';
puntero++;
};
};
|
- El próximo paso es agregar cada uno de estos procedimientos a la sección export del archivo Demo.def,
para que puedan ser accedidas desde programas externos. Simplemente, para cada función en la DLL, añadimos
una línea conteniendo el nombre exacto de la misma. En nuestro caso el archivo quedaría como sigue:
Archivo Demo.def
LIBRARY "DEMO"
DESCRIPTION 'DEMO Windows Dynamic Link Library'
EXPORTS
Suma
LlenaDeX
|
- Luego necesitamos proveer los prototipos de las funciones en el archivo de cabecera Demo.h.
Los prototipos son exactamente iguales a las definiciones que agregamos a Demo.cpp pero sin los nombres de variables.
El código que sigue lo agregamos al final del archivo Demo.h creado por el asistente:
Archivo Demo.h
#ifdef __cplusplus
extern "C" {
#endif
int WINAPI Suma(int, int);
void WINAPI LlenaDeX(char*, int);
#ifdef __cplusplus
}
#endif
|
- Por último, salvamos todos los archivos y nos dirigimos al menú Build y seleccionamos Build Demo.dll
para compilar un archivo de prueba que se creará en un subdirectorio \debug dentro del directorio principal
del proyecto.
- Cargamos el entorno de VB y creamos un nuevo proyecto Standard Exe denominándolo Demo.vbp
- Agregamos un módulo e incorporamos las declaraciones correspondientes:
Archivo Demo.bas
Declare Function Suma Lib "c:\demo\debug\Demo.dll" (ByVal Numero1 As Long, ByVal Numero2 As Long)
Declare Sub LlenaDeX Lib "c:\demo\debug\Demo.dll" (ByVal Cadena As String, ByVal Longitud As Long)
|
Observemos que la función Suma devuelve un valor, por lo tanto la declaramos como Function mientras que
LlenaDeX no retorna nada por lo cual la definimos como Sub.
Tambien es importante hacer la correcta conversión de tipos para evitar errores
que normalmente producen el colapso del sistema entero.
- Agregamos un formulario desde donde utilizamos las funciones llamándolas mediante dos botones, por ejemplo:
Archivo Demo.frm
Private Sub CommandSuma_Click()
Print Suma(2,3)
End Sub
Private Sub CommandLlenaDeX_Click()
Dim Cad As String
Cad = Space(30)
LlenaDeX Cad, 30
Print Cad
End Sub
|
Un detalle MUY IMPORTANTE: Cuando pasamos cadenas de caracteres a procedimientos escritos en C, no podemos
pasar cadenas vacías o variables que no hayan sido inicializadas. Puesto que C recibe un puntero a una dirección
de memoria que debe contener algo (en nuestro caso, inicializamos la variable con 30 espacios).
- ¡FIN! Nuestro proyecto está terminado. Solo resta compilar el proyecto en C++ con la opción
WIN32 Release, que creará la versión definitiva de nuestra librería en el subdirectorio \release.
En Visual basic, debemos tener cuidado con la referencia a la ubicación del archivo DLL en el parámetro
Lib de la sentencia Declare. Para evitar inconvenientes lo más sencillo es ubicar nuestra librería
en el mismo directorio que la aplicación Visual Basic, o bien en el directorio \windows.
|