La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1409 - ACCESO A FUNCIONES EN UNA DLL
Autor:  eye
Hola a todos:
Mi problema es que necesito acceder a una función en una dll hecha en Visual C++ 5 que a su vez inicializa algunos objetos con clases también generadas en este lenguaje. Bueno, la llamada lo hago mediante un programa escrito en Fox. Cuando pruebo está función sin nada de codigo ("return 0;") funciona bien, pero cuando ingreso el código que necesito me da error.
¿Alguien puede decirme como utilizar los archivos .DEF, o como utilizar el declspec(dllexport), u otra forma de exportar funciones desde una DLL?
Desde ya gracias...

  Respuesta:  Jorge Garay
tenes dos formas de exportar funciones desde una dll:
* en un archivo .def se ponen las funciones a exportar
* usas _declspec(dllexport) en la declaracion de la funcion en el codigo fuente.

yo uso la primera.
el formato del .def es el siguiente:

---COMIENZO ARCHIVO (ESTA LINEA NO)---
LIBRARY [NOMBRE DEL ARCHIVO DLL SIN EXTENSION]
EXPORTS
[NOMBRE FUNCION 1] @1
[NOMBRE FUNCION 2] @2
... @...
---FIN ARCHIVO---

Solo va el nombre de la funcion -sin los parametros.
Este archivo debe estar en el mismo directorio
que el codigo fuente de la dll y se debe llamar igual que ésta:

[NOMBRE DEL ARCHIVO DLL SIN EXTENSION].def

importante: depende desde donde llames a las funciones de la dll que tenes que usar una "calling convention". Por ejemplo para usar en Visual Basic tenes que poner _stdcall:

void long _stdcall funcionX(int n){...}

Todo esto aparece en la MSDN.