C/Visual C - Importar funcion libreria dinamica

 
Vista:

Importar funcion libreria dinamica

Publicado por juan (7 intervenciones) el 13/11/2002 00:30:04
Buenas, si tengo una funcion en un modulo y este carga una dll dinamica en tiempo de ejecucion,
¿es posible llamar desde la dll a la funcion definida en el modulo?.

Segun la ayuda habria que definirla:
__declspec(dllimport) void funcion (void);

pero al linkar da error LNK2001: unresolved external symbol __imp__funcion

Si la defino con:
extern void funcion (void);

El error es LNK2001: unresolved external symbol _funcion

¿Como tengo que hacerlo?

Gracias.

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:Importar funcion libreria dinamica

Publicado por Oliver++ (339 intervenciones) el 13/11/2002 03:53:06
al parecer tienes problemas con la deformacion de nombres. Busca a ver la definicion de las funciones que estan en el mòdulo y recuerda que al linkarlas debes especificar al linker que usas funciones de este mòdulo al menos que uses las funciones del mòdulo con el mètodo de carga retrasada.
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

RE:Importar funcion libreria dinamica

Publicado por juan (7 intervenciones) el 13/11/2002 09:42:12
:-) muy bueno .... ¿y como lo hago? puedes pasarme un mini-ejemplo..

Saludos
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

RE:Importar funcion libreria dinamica

Publicado por oscar Medina (114 intervenciones) el 13/11/2002 15:03:11
Tenes que linkear incluyendo los archivos .lib de las respectivas dlls, si no los tenes vas a tener que hacerlo con LoadLibrary.
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

RE:Importar funcion libreria dinamica

Publicado por El Mogur (202 intervenciones) el 13/11/2002 20:33:42
No entiendo qué es para tí un módulo :-?
Si lo que dices es que tienes una aplicación (eso sería un módulo?), que carga una DLL dinámicamente, y quieres que esa DLL llame a una función de la aplicacion, puedes hacerlo pasandole a la DLL el puntero a la función que quieres que llame; ella la guarda, y cuando sea necesario te llama.

Si se puede hacer, si tu módulo también exporta funciones o no... pues ni idea.

Un saludo.
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

Solucionado

Publicado por juan (7 intervenciones) el 14/11/2002 09:52:40
Gracias a todos., lo solucione...
No se si me explique, le llamo modulo al programa principal y este carga una dll y la dll llama a una funcion del programa principal.
Es decir el programa exporta una funcion a la dll.
Lo que he hecho es definir la funcion que se exporta como:

#ifdef _EXPORTING
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
DLL void funcion (char * txt);

Y _EXPORTING se define en el modulo principal.

Al definirla de esta forma, al compilar el principal, ademas de '.exe' crea un '.lib' y este ultimo se tiene que añadir como libreria al compilar la dll


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

RE:Solucionado: duda

Publicado por El Mogur (202 intervenciones) el 14/11/2002 13:41:52
Ya, pero entonces, esa DLL solo la puede utilizar tu ejecutable, ¿no?
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

RE:Solucionado: duda

Publicado por juan (7 intervenciones) el 14/11/2002 13:53:17
si, acertastes... :-)
El hecho de la dll es para poder modularizar el programa, todos los clientes tienen el mismo, pero dependiendo de la dll que instale funciona de una forma u otra....
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

En que quedaste juan?

Publicado por Oliver++ (339 intervenciones) el 14/11/2002 15:02:35
Lei todas la pregunta y todas las respuestas del tu tema, pero no se si resolviste o no el problema. Quisiera saber si por fin lo solucionaste y si no detallalo otra vez pero de manera mas profunda. Así los leyentes podremos ayudarte mejor. Gracias.
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

RE:En que quedaste juan?

Publicado por juan (7 intervenciones) el 14/11/2002 15:53:24
Gracias por tu interes, pero como dije antes lo tengo solucionado (mira la respuesta que di anterior a esta)

Si aun no te quedo claro lo que quiero hacer, lo repito:
Un programa (el principal) carga una dll y esta dll llama a la funcion definida en el programa (principal).
Creo que todos los que me contestaron entendieron lo contrario: llamar del programa principal a una funcion de la dll, que no es lo que quiero, sino, todo lo contrario.

El problema era como definir la funcion (en el '.h' comun para el programa y la dll) y como incluirla para poder linkar la dll.

Una vez mas, gracias a todos.
Juan




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

RE:Solucionado: duda

Publicado por El Mogur (202 intervenciones) el 14/11/2002 19:27:45
Ah, vale, entonces estupendo ;-)
No me convencía mucho la solución, eso de que la DLL solo pudiera llamar a tu aplicación, pero si es por eso... ¡la verdad, es buena idea!

Un saludo.
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