Logo

¡Bienvenido a Stratos!

Acceder

Foros



Problemilla Creando Una Dll...

Iniciado por TheAzazel, 03 de Enero de 2005, 04:17:56 PM

« anterior - próximo »

TheAzazel

 vamos a ver... tengo un proyecto en Visual Studio (da igual el 6, 2001 o 2003) que unifica otros dos proyectos, uno esta en C y el otro en C++ y me gustaria unificar los dos, en una libreria DLL unica pero... solo me la crea sobre el proyecto C, el otro nanai y tiene su logica, pq cada uno, tiene su forma de guardar las funciones en la DLL pero..mi pregunta es... existe algun metodo para poder encapsular todo en la DLL o necesariamente tendre que crear dos dll distintas??

PD: aquellos que piensen q me complico la vida y pq no uso directamente dos dll distintas...comentarles q, es a gusto del consumidor y no me gusta tener mil dll...con una y todo encapsulado vale, q luego es un puto coñazo

TheAzazel

 Lo mismo di poca informacion..asi que.. amplio y si alguien tiene alguna idea (por absurda q parezca), ponerla aqui pq ya no se donde buscar  (nooo) .
El problema en concreto es... con las variables (q cosa mas tonta verdad?), en la dll las pongo como
__declspec( dllexport )
y va de maravilla, pero a la hora de linkar un programa que utilice la DLL dichosa me da errores diciendo que no encuentra la variable X (una que esta exportada, vamos, definida y declarada en la DLL) en la funcion XX (tambien de la DLL) a la cual hace referencia...es decir,  la funcion de la DLL XX no encuentra la variable X de la propia DLL... y eso me parece rarisimo... y me he quedao bloqueo...
seguire indangando por narices para saber que leches esta pasando... cualquier ayudita es bienvenida, gracias.
:(  

deadLock++

 ¿pero haces el "__declspec( dllimport)" en el programa que utliza dicha variable?

TheAzazel

 Sip, lo hago pero lo mismo da :S, me sigue diciendo lo mismo.... he probado a utilizar el extern "C" para que no decore las variables con los nombres de C++ si no, los de C y si, las cambia el nombre pero siguen sin encontrarlas... pero es mu raro... no encuentra las propias variables que exporto de la dll en la dll ¿? .
Es posible que, al estar exportadas no las busque en la propia dll pero digo y o..si la dll ya esta compilada!!!
empiezo a kemarme... jajaja

deadLock++

 ¿Por que no te fijas con un "dumpbin /EXPORTS" en la dll para ver si está exportado todo lo que debería y de que manera lo está?


TheAzazel

 Sip, he utilizado el Dependency Walker, abro la DLL generada y busco los simbolo y voila! las variables aparecen exactamente con el mismo nombre que el error que me da diciendo que:

02_LogSystem.obj : error LNK2019: símbolo externo _Version sin resolver al que se hace referencia en la función "public: void __thiscall CRM32Pro_ILogSystem::Init(char *,char,char,char *)" (?Init@CRM32Pro_ILogSystem@@QAEXPADDD0@Z)


y os explico, CRM32Pro es la libreria, tengo un header donde "Version" esta declarada como extern y luego, en el modulo 00_main.cpp es donde va su definicion. 02_LogSystem.obj es otro modulo de la libreria que utiliza Version y parece, que dentro de ese modulo.. no sabe que es "Version" aunq..compila como DLL sin dar ningun error y... si la misma libreria, la genero en .lib y la linko estaticamente..va todo como la seda...algo esta pasando, que, al convertirlo en DLL, "Version" solo es valida en su modulo (00_main.cpp) y no en los otros modulos de la libreria (lease 02_LogSystem.cpp) aunque...ambos incluyen el header donde esta declarado "Version" como extern (que en version DLL ademas tiene su " __declspec( dllexport )").

de locos eh?

TheAzazel

 Bueno señores, ya lo he solucionado.... entre macros y mas macros...lo tengo, menudo engorro la leche...
si a alguien le sirve de algo saber la solucion q lo diga... y lo posteo por aki..si no, como no tengo muxo tiempo... eso q me ahorro.
Gracias Deadlock por tu ayuda y a todos akellos q hayan pensao un poco :)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.
Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.