#define _personas_h_
declaramos la función que vamos a llamar desde visual.
¿qué vamos a hacer con esta función? Llamarla desde visual basic luego la exportaremos.Para designar una fución o una variable como exportable tenemos que ponerle delante de el tipo de datos la convención que nos indica que vamos a exportar que es __declspec(dllexport). Como no vamos a hacer una dll para una sola función y poner la convención es muy pesado haremos un define
#define dllexport __declspec(dllexport)
y la función que en un principio habiamos declarado asi
int AumentarNom(int nomina)
ahora quedará asi
dllexport int AumentarNom(int nomina)
#end if
en el cpp definimos la función
primero incluimos el archivo de cabecera
#include "C\903684 \personas.h"
y definimos la función
Aumentar nom(int nomina)
{
if(nomina>5000)
return nomina
else return(nomina+1000)
}
Compilamos la dll y ya está.
Solo falta un pequeño detalle
Visual basic no lee la comvención de llamada cdecl que viene por defecto en visual c++. Tendremos pues que cambiar la convención de llamada a una que entienda visual basic que es la _stdcall
Seleccionamos el cpp donde hay la función y en la pestaña C/C++ de Settings, en calling convention lo cambiaremos a stdcall y volveremos a compilar.
Añadimos un form y un modulo .
En el modulo escribimos
(pepe.dll es el nombre que le hemos dado a la dll)
Public function declare AumetarNom Lib "C:\ ..\pepe.dll alias "#1"(byval nomina as long) as long
Con el alias le proporcionamos un punto de entrada, una dirección.Le pasamos pues un nº ordinal que nos indica donde está la funcion en la dll(la dirección de la función)
Las funciones se van ordenando una detrás de otra en la dll, lutgo le pasamos el nº ordinal de la funcioon que será el punto de entrada, la manera como entraremos a la dll
Hay una utilidad que se llama dumpbin.exe que nos proporciona los nº ordinales de las fuciones de las dll
El int de visual c++ lo declaro como byval nombrevariable long
Porque en
VISUAL C++ EQUIVALE EN VISUAL BASIC
ATOM BYVAL INTEGER
SHORT BYVAL INTEGER
INT BYVAL LONG
BYTE BYVAL BYTE
CHAR BYVAL BYTE
Y finalmente llamamos a la función en el clic de un botón
Dim pepe as long
(txt es un textbox que hemos puesto en el form.)
Pepe= aumentarnom(clng(txt.text))
Txt.text = pepe
Un Saludo
Joaquin Roca Verges
[email protected]