C/Visual C - Usar dll en Borland C++

 
Vista:

Usar dll en Borland C++

Publicado por Jorge (3 intervenciones) el 31/10/2007 15:22:28
Hola a todos, mi problema es el siguiente:

Tengo una librería dll que no he implementado y deseo usar desde un programa en Borland C++. Para ello obtengo los ficheros .def y .lib mediante las herramientas implib e impdef. En la dll se incluyen funciones de tipo C y métodos que forman parte de distintas clases. Yo sólo dispongo de los .h de cada una de las clases, pero no de su implementación. Se supone que con los ficheros .h, .def y .lib debería ser suficiente, pero no es así. Las llamas a funciones de tipo C se realizan perfectamente, pero no consigo llamar desde mi programa a un método (por ejemplo el constructor) que pertenece a una clase, alguien me puede ayudar?

Creo que puede tener que ver con el compilador utilizado para generar la dll. Al abrir el archivo .def tengo cosas como:

LIBRARY MORFO.DLL

EXPORTS
_Z12PrintDepTreeN4treeI7depnodeE17preorder_iteratorEi @1 ; _Z12PrintDepTreeN4treeI7depnodeE17preorder_iteratorEi
_Z13yy_scan_bytesPKci @2 ; _Z13yy_scan_bytesPKci
_Z14yy_init_bufferP15yy_buffer_stateP6_iobuf @3 ; _Z14yy_init_bufferP15yy_buffer_stateP6_iobuf
_Z14yy_scan_bufferPcj @4 ; _Z14yy_scan_bufferPcj
_Z14yy_scan_stringPKc @5 ; _Z14yy_scan_stringPKc
_Z15yy_flush_bufferP15yy_buffer_state @6 ; _Z15yy_flush_bufferP15yy_buffer_state
_Z16yy_create_bufferP6_iobufi @7 ; _Z16yy_create_bufferP6_iobufi

...

pcre_callout @2827; pcre_callout
pcre_compile @2828; pcre_compile
pcre_compile2 @2829; pcre_compile2
pcre_copy_named_substring @2830; pcre_copy_named_substring
pcre_copy_substring @2831; pcre_copy_substring
pcre_exec @2832; pcre_exec
pcre_free @2833; pcre_free
pcre_free_substring @2834; pcre_free_substring
pcre_free_substring_list @2835; pcre_free_substring_list

Es decir, las funciones de tipo C aparecen en el .def perfectamente, pero aquellos métodos que pertenecen a una clase aparecen con un nombre raro, y al intentar linkar, C++ Builder me dice:

unresolved external.

Muchas gracias por adelantado!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Usar dll en Borland C++

Publicado por Nelek (816 intervenciones) el 07/11/2007 12:48:11
Normalmente el *.lib y el *.def tienen funciones distintas. El LIB se usa para el linkado estático, es decir, tu incluyes la libreria (*.lib) en tu proyecto como un módulo más y luego usas el header (*.h) y usas las funciones tal cual usarías funciones en otra clase.

En cambio el *.def se usa para cargar la dll dinámicamente. Es decir, en un punto en concreto se necesita una funcion externa, se usa LoadLibrary (szRutaDll), se busca la funcion GetProcAddess (hDllInstance, szNombreFuncion) y luego se usa.

Para tu problema a la hora de compilar, me parece que te has olvidado de incluir el *.lib en tu proyecto (pero NO con #include). Creo que has hecho simplemente #include Morfo.h y ya está. Con lo que el compilador reconoce que sus funciones existen, pero no sabe donde buscar, por eso el "unresolved external"

Nota: Puede que me equivoque, llevo poco tiempo trabajando con DLLs
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar