Stratos: Punto de Encuentro de Desarrolladores

¡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.