• Lunes 18 de Noviembre de 2024, 01:44

Autor Tema:  Link En Visual C++ 6.0  (Leído 2105 veces)

andreina

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Link En Visual C++ 6.0
« en: Jueves 20 de Octubre de 2005, 18:09 »
0
Hola
Necesito acceder a funciones que estan escritas en un dll y un .lib, para poder usarlas debo incluir el archivo .h y el .lib
Para ello en la ventana de settings del proyecto y en la pestaña de link, categoria general y en object\module incluyo el .lib que necesito.
Adicionalmente en options hago el include del .h que necesito. Pero obtengo el siguiente error:
Error LNK2001 unresolved external simbol "int_stdcall LS100_Open" donde LS100_Open es la funcion del .lib que necesito
Error LNK1120 unresolved simbol
Apreciaria mucho si me ayudasen con este problema
Saludos

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Link En Visual C++ 6.0
« Respuesta #1 en: Jueves 20 de Octubre de 2005, 19:06 »
0
En teoria ya deberia funcionar, podes usar el DUMPBIN para ver los simbolos que declarados en el .LIB y pegarlos en este mensaje. Sino tambien podes pasarnos el LIB, la DLL y el .H para poder comprobar que pasa.

DUMPBIN /SYMBOLS ARCHIVO.LIB  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

andreina

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Link En Visual C++ 6.0
« Respuesta #2 en: Jueves 20 de Octubre de 2005, 20:07 »
0
Hola muchas gracias por responder
Aqui te envio el .dll, el .lib y el .h.
Gracias de antemano
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Link En Visual C++ 6.0
« Respuesta #3 en: Jueves 20 de Octubre de 2005, 20:36 »
0
De nadas y ya se cual es el problema, el enlazador (linker: link.exe) esta tratando de enlazar una funcion de C++ y la funcion de la DLL esta exportada como C.

Te lo voy a mostrar con un caso practico, creando el archivo Prueba.cpp con este codigo:
Código: Text
  1.  
  2. #include <windows.h>
  3. #include "LS100.H"
  4.  
  5. void main()
  6. {
  7.   LS100_Open((HWND)0, (HANDLE)0, 0);
  8. }
  9.  
  10.  

Si le das a CL Prueba.cpp LS100.LIB obtendras el mismo error que con el proyecto que tenes, mientras que si renombras Prueba.cpp a Prueba.c y haces CL Prueba.c LS100.lib enlazara perfectamente.

¿Soluciones? Lo primero que se me viene a la mente es poner un define que cambie el extern por extern "C" de esta manera las funciones estaran declaradas como exportacion de C y no de C++.

Con esta linea en el Ls100.h ya estaria solucionado:
#define extern extern "C"

 :devil:  :devil:  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

andreina

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Link En Visual C++ 6.0
« Respuesta #4 en: Jueves 20 de Octubre de 2005, 20:52 »
0
Muchas gracias ya me funciono  :D

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Link En Visual C++ 6.0
« Respuesta #5 en: Jueves 20 de Octubre de 2005, 20:55 »
0
Cita de: "andreina"
Muchas gracias ya me funciono  :D
De nadas y menos mal que funciono jeje, lo habia probado  :devil:  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

andreina

  • Miembro activo
  • **
  • Mensajes: 35
    • Ver Perfil
Re: Link En Visual C++ 6.0
« Respuesta #6 en: Viernes 21 de Octubre de 2005, 21:25 »
0
Hola
Tengo otro problema, para hacer uso de las funciones que estan incluidas en el dll debo reservar memoria, para ello uso malloc y hago el include de la libreria que corresponde, es decir, tengo:

 #include <malloc.h>
luego en el programa hago:
char  *codeline;
codeline = (char *)malloc(sizeof(char)*lengthCodeline+1);

Al hacer esto obtengo el siguiente error:
error C2537: 'CC' : illegal linkage specification
y el error me lleva a lo siguiente

#ifdef  __cplusplus
extern "C" {
#endif

Creo que esto tiene que ver con lo que me explicastes
Que puedo hacer?
Muchas gracias de Antemano
Saludos

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Link En Visual C++ 6.0
« Respuesta #7 en: Viernes 21 de Octubre de 2005, 22:25 »
0
Cita de: "andreina"
Hola
Tengo otro problema, para hacer uso de las funciones que estan incluidas en el dll debo reservar memoria, para ello uso malloc y hago el include de la libreria que corresponde, es decir, tengo:

 #include <malloc.h>
luego en el programa hago:
char  *codeline;
codeline = (char *)malloc(sizeof(char)*lengthCodeline+1);

Al hacer esto obtengo el siguiente error:
error C2537: 'CC' : illegal linkage specification
y el error me lleva a lo siguiente

#ifdef  __cplusplus
extern "C" {
#endif

Creo que esto tiene que ver con lo que me explicastes
Que puedo hacer?
Muchas gracias de Antemano
Saludos
Efectivamente el problema surge por tener el define de extern pero realmente no hace ninguna falta incluir malloc.h, tenes varias opciones, una es incluir malloc.h antes de LS100.h, otra es volver a definir extern a extern justo despues de incluir LS100.h (#define extern extern) y la mejor es no incluir malloc.h que no hace falta  :devil:  :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.