Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Loover en 04 de Diciembre de 2003, 03:39:32 PM

Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 04 de Diciembre de 2003, 03:39:32 PM
Bueno, en el post anterior me convenció la StlPort y empecé a usarla. Va de maravilla... excepto con un problema que no sé resolver.

El caso es que tengo una clase que será usada desde una DLL tal que:


#define DLL_EXP __declspec(dllexport)

class DLL_EXP LOV_ImageManager
{
public:
...
...
...
deque <int> mDequeImages;
...
...
...
void MetodoDePrueba ();
...
...
...
};


Hasta ahí todo bien, excepto que al compilar me da el siguiente warning:

warning C4251: 'mDequeImages' : class '_STL::deque<int,class _STL::allocator<int> >' needs to have dll-interface to be used by clients of class 'LOV_ImageManager'


Luego, en un método de esa clase tengo:

void LOV_ImageManager::MetodoDePrueba ()
{
mDequeImages.push_back(2);      // Le meto un int 2 por meterle algo de prueba
int tema = mDequeImages.at (0); // ESTA LÍNEA PEGA UN REVENTÓN
}


Cuando digo que pega un reventón, me refiero a más tarde. Compilar compila, aunque con ese warnig, y tb lo da al linkar.
Pues bien, una vez desde el código que usa esta DLL, al compilarlo me da el mismo warning. Luego al ejecutarlo pega un reventón en la línea que he señalado y el programa se cuelga.
Como veis he usado un "deque" (muy similar al "vector") pero no es cosa suya, esto peta con cualquier container. Vamos, que si pongo vector en lugar de deque peta igual.
El usar enteros en el deque es solo para hacer la prueba.
Otra cosa, si el deque, vector o el container que sea no está definido en la clase sino dentro de un método entonces no peta. Pero claro, yo quiero que ese container sea accesible por todos los métodos y que no se destruya al acabar el método en cuestión, vamos, que sea public o private.

¿Qué puedo hacer para remediarlo?
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 04 de Diciembre de 2003, 04:54:54 PM
 Odio que haya un número fijo de ediciones del post.  <_<

Tb me da este warning:

warning C4786: '_STL::_STLP_alloc_proxy<LOV_ImageManager::structImage * * *,LOV_ImageManager::structImage * *,_STL::allocator<LOV_ImageManager::structImage *> >::~_STLP_alloc_proxy<LOV_ImageManager::structImage * * *,LOV_ImageManager::structImage *
*,_STL::allocator<LOV_ImageManager::structImage *> >' : identifier was truncated to '255' characters in the debug information


Aunque bueno este es en el depurado y no creo que haya problema ahí, o eso me han dicho.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Grugnorr en 04 de Diciembre de 2003, 05:21:23 PM
 Puede que necesites hacer el import .

#ifdef __BUILD_DLL_
#define __DLL_FUNCTION __ declspec(dllexport)
#else
#define __DLL_FUNCTION__ declspec(dllimport)

Y en la dll declaras el símbolo ese.

PD: Hay una cosa muy bonita llamada namespaces, mucho mejores que los prefijos en las funciones a mi juicio.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 04 de Diciembre de 2003, 09:32:07 PM
 Pues no me queda muy claro que es lo que tengo que hacer


#define __BUILD_DLL_

class __DLL_FUNCTION__ LOV_ImageManager ¿¿¿ o es class __BUILD_DLL_ LOV_ImageManager ???
{
public:

...
...


¿Eso?
Y por otro lado lo que has puesto, ¿no?

Pues eso pega un petamiento del copin. En el primer caso no compila y en el segundo caso compila (y sin warnings!!) pero el codigo que utiliza la dll me da un "unresolved external symbol" en los métodos que utilizo de esa clase, vamos, como si no la exportarse bien.
Por favor, explicamelo con algún ejemplo.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 04 de Diciembre de 2003, 10:45:54 PM
 Bueno pues un chaval del canal, EthDra, me ha solucionado el problema de una manera tan trivial que me da hasta vergüenza:

settings>c++>code generation>multithreaded dll

Mecagoentolosmuertosdelastlportlasdllylamadrequelaspario
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Grugnorr en 04 de Diciembre de 2003, 10:50:29 PM
 Lo primero, me falta el #endif ^_^

#ifdef __BUILD_DLL_
#define __DLL_FUNCTION __ declspec(dllexport)
#else
#define __DLL_FUNCTION__ declspec(dllimport)
#endif                 <-----------



-----dll.h------------
#define __BUILD_DLL__

class __DLL_FUNCTION__ CExportada
{
public:

void f();
..........
};



----main.cpp------
void f()
{
CExportada kk;
kk.f();

}


Con eso tienes una clase exportada( el método fácil de las dlls).

Tienes que escoger entre crear un .lib que enlace con la dll->carga implícita o cargarla manualmente con LoadLibrary(), pillar los punteros a cada función con GetProcAddress() y liberar la dll con FreeLibrary().

Puede que no hayas linkado con la .lib de la dll

Mañana si tengo algo de tiempo me enrollo más, postea si tienes problemas...

PD: Pon la dll como multithreaded para que puedas traspasar dll boundaries o algo así me suena ^_^
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Grugnorr en 04 de Diciembre de 2003, 11:01:11 PM
 Eso es posting concurrente  :D  
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 05 de Diciembre de 2003, 01:20:06 AM
 Gracias a ti tb Grugnorr :D
Eso último que has dicho, el multithreaded era lo que me jorobaba. Si yo llevaba usando dll ya hacía mucho tiempo (usando .lib al compilar y linkar; y el .exe cliente usando la .dll) pero hasta ahora no me había dado por utilizar STL desde una dll, que por cierto, es una maravilla. Creo que ya he domado a la StlPort (aunque lo mismo vuelvo por aquí con algun nuevo quebradero de cabeza).

Un saludo!
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: [Over] en 12 de Marzo de 2008, 10:37:15 AM
http://www.unknownroad.com/rtfm/VisualStudio/warningC4251.html
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 12 de Marzo de 2008, 10:45:18 AM
[Over], te tengo dicho que no le des al crack bien de mañana. Madre mía, ¡un post del 2003! :D
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: [EX3] en 12 de Marzo de 2008, 10:47:44 AM
Ya pensaba que era el unico que leia 2003 en vez de 2008 en los replies, no estoy loco :lol:

Salu2...
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 12 de Marzo de 2008, 11:27:42 AM
El caso es que la "solución" fué (y sigue siendo) un: #pragma warning (disable : 4251)

¿Mare mía, tantos años llevo con la LooverLib de los huevos? :S

Jeje.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Vicente en 12 de Marzo de 2008, 12:13:50 PM
Toma ya Over, te has superado :p
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: [EX3] en 12 de Marzo de 2008, 03:15:14 PM
Cita de: "Loover"¿Mare mía, tantos años llevo con la LooverLib de los huevos? :S
No son tantos, yo empece con el mio en el 2001 (http://dxlib32.se32.com/oldsite/desc.htm), pues no ha llovido ni nada desde entonces, y Aza creo que anda por ahi tambien con su libreria segun ha comentado en alguna kdd. Se nota que nos lo tomamos con calma esto de programar librerias xD

Salu2...
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 12 de Marzo de 2008, 03:23:32 PM
Es el cuento de nunca acabar. Como hobbie, pues vale, pero si tuvieramos que haber estado 10 años pa hacer la librería y luego el juego, nos podemos pegar un tiro.

A mi lo que más me lleva de cabeza es la documentación. Es un trabajazo tremendo.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Zaelsius en 12 de Marzo de 2008, 03:32:34 PM
Cita de: "Loover"A mi lo que más me lleva de cabeza es la documentación. Es un trabajazo tremendo.

Por eso en empresas "tochas" con mucho software propio es común que tengan "Technical Writers", ingenieros dedicados exclusivamente a la generación y mantenimiento de la documentación, ejemplos, tutoriales, etc. Otro curro más :)
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 12 de Marzo de 2008, 03:37:39 PM
Vaya mierda de curro. Pero sí, muy necesario. Porque puedes tener la mejor librería del mundo, que como no esté documentada, te la pelas.

Y no solo documentada, sino que esté documentada en inglés :D

Y con tutoriales.

PUF
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: yens en 12 de Marzo de 2008, 03:55:22 PM
Huele a necromancer jajajaja qué mal estamos Over! Recuérdame que sea yo quien te invite a una cerveza xDD
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Vicente en 12 de Marzo de 2008, 04:40:20 PM
Cita de: "Loover"Vaya mierda de curro. Pero sí, muy necesario. Porque puedes tener la mejor librería del mundo, que como no esté documentada, te la pelas.

Y no solo documentada, sino que esté documentada en inglés :D

Y con tutoriales.

PUF

A mi no solo la documentación, si no dar soporte. Imagínate que tuvieras 1000 personas usando tu librería y preguntando en los foros :p

Un saludo!

Vicente
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Capiflash en 12 de Marzo de 2008, 05:07:55 PM
Vicente , imaginarme eso que has dicho me ha quitado las ganas de merendar xDD
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 12 de Marzo de 2008, 05:39:59 PM
Vaya mierda de hobby, jajaja.

¿No había por el foro un libro de la cria de caracoles? Creo que es un afición mucho más fructífera.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: fjfnaranjo en 12 de Marzo de 2008, 06:56:52 PM
CitarSobre la colina oscura cubierto por un manto de nubes aparece una extraña figura, vestida de negro. Alza los brazos y pronuncia unas crípticas palabras en un lenguaje ininteligible:

Haszel eoral, doisde zidum!

Y un cadáver ya putrefacto se levanta del suelo. En su extraña camiseta se puede leer un numero, 2003.

Maldito 3, se parece mucho al 8. Es como el 5 en el Diablo II, induce a error.  :P
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: yens en 12 de Marzo de 2008, 08:02:28 PM
Cita de: "Loover"Vaya mierda de hobby, jajaja.

¿No había por el foro un libro de la cria de caracoles? Creo que es un afición mucho más fructífera.
O sobre la eyaculación precoz :>

pd: Abstenerse mal pensados, yo soy un macho ibérico del norte.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 12 de Marzo de 2008, 08:19:24 PM
Más se gana vendiendo libros de "enlarge your pennis".

De todos modos, en el siglo pasado, el "carga y descarga" rápido, era considerado un signo de macho ibérico :D. Ahora hay que intentar correr la maratón.

Este post va camino de la basura.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: [EX3] en 13 de Marzo de 2008, 12:48:43 AM
Cita de: "Loover"Es el cuento de nunca acabar. Como hobbie, pues vale, pero si tuvieramos que haber estado 10 años pa hacer la librería y luego el juego, nos podemos pegar un tiro.
Mmm, el sueldo ahora si me llega para comprar un revolver y una caja de balas... aun estoy a tiempo de poner fin a mi locura, por que justo llevo ese camino que comentas xDD

Cita de: "Loover"A mi lo que más me lleva de cabeza es la documentación. Es un trabajazo tremendo.
No me lo recuerdes, menudas dos semanas de paliza cuando escribi la primera version en CHM de la doc de la dx_lib32, y la pereza que aun tengo para actualizar los cambios para la dichosa ultima release. En serio, que coñazo supremo :cry:

Cita de: "Loover"Este post va camino de la basura.
Yo mas bien lo moveria a Off-Topic, ha sido uno de los "revival" mas curiosos del foro en años xDDDD

Salu2...
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 13 de Marzo de 2008, 01:35:13 AM
CitarNo me lo recuerdes, menudas dos semanas de paliza cuando escribi la primera version en CHM de la doc de la dx_lib32, y la pereza que aun tengo para actualizar los cambios para la dichosa ultima release. En serio, que coñazo supremo

Doxygen te hace la vida un poco más féliz. Por lo menos cuando le das al botón y te genera la documentación... parece que sale "sola", jaja.

CitarMmm, el sueldo ahora si me llega para comprar un revolver y una caja de balas... aun estoy a tiempo de poner fin a mi locura, por que justo llevo ese camino que comentas xDD

Me troncho, jaja.

Yo a la LooverLib, no puedo darle soporte, a no ser que haga finalmente lo de vender licencias por 99$: justo para eso mismo, para que el contestar mails, etc. sea una pérdida de tiempo, pero mínimamente renumerada.

Por cierto, acabo de terminar de pasar toda la documentación a inglés. PUF.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Vicente en 13 de Marzo de 2008, 07:39:38 AM
Cita de: "[EX3"]No me lo recuerdes, menudas dos semanas de paliza cuando escribi la primera version en CHM de la doc de la dx_lib32, y la pereza que aun tengo para actualizar los cambios para la dichosa ultima release. En serio, que coñazo supremo :cry:

Puf, yo recuerdo cuando pasé Haddd de spanglish a inglés, madre mía que largo se me hizo...

Recuerdo iluso de mi que me dije: "ya de paso que lo traduzco activo las normas de diseño de código a ver si puedo dejar el proyecto bien bien", y cuando las puse y vi en el visual como 8000 warnings (sin exagerar) me dije: "joder, paso, tampoco nos vamos a poner sibaritas :p"

Un saludo!

Vicente
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 13 de Marzo de 2008, 09:47:30 AM
Citarya de paso que lo traduzco activo las normas de diseño de código a ver si puedo dejar el proyecto bien bien

¿Eso que eh lo que eh? ¿Ande se activa eso? Me da miedo solo intentarlo.
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: [EX3] en 13 de Marzo de 2008, 10:45:24 AM
Cita de: "Loover"Doxygen te hace la vida un poco más féliz. Por lo menos cuando le das al botón y te genera la documentación... parece que sale "sola", jaja.
Utilice un port de Doxigen para Visual Basic 6.0 llamado vbDox (http://vbdox.sourceforge.net/) que me saco toda la base de la documentacion del proyecto. La paliza fue añadir los metatags al codigo fuente, que encima fallaban mas que una escopeta de feria, lo que hizo que tuviera que arreglar a mano la salida via FrontPage. Sin vbDox no hubieran sido dos semanas si no 2 meses o mas :lol:

Cita de: "Loover"Yo a la LooverLib, no puedo darle soporte, a no ser que haga finalmente lo de vender licencias por 99$: justo para eso mismo, para que el contestar mails, etc. sea una pérdida de tiempo, pero mínimamente renumerada.
Yo con la dx_lib32 nunca plantee aplicarle licencias de pago por que sinceramente, ni yo pagaria por usarla habiendo para VB6.0 herramientas mas completas (TrueVision3D (http://www.truevision3d.com/) por ejemplo), sin embargo, cierto proyecto que llevo entre manos con SiPoX si sale como esperamos si seria viable aplicarle alguna licencia de bajo coste y justificar asi un soporte, pero de momento lo planteamos como un proyecto cerrado para nosotros, por lo menos hasta que veamos el resultado final y si cumple nuestras espectativas. El problema que veo es que si se le pone licencia seria el traducir la documentacion y dar soporte igualmente en ingles, cosa que para mi ahora mismo me resultaria un problema.

Salu2...
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 13 de Marzo de 2008, 11:22:33 AM
Sí, lo del inglés es necesario 100%. Supongo que habré cometido mil errores a la hora de traducirla, la iré puliendo poco a poco conforme la gente me vaya indicando errores, lo bueno de ser un texto técnico, es que la traducción, si sabes el vocabulario, es bastante más sencilla.

CitarYo con la dx_lib32 nunca plantee aplicarle licencias de pago por que sinceramente, ni yo pagaria por usarla habiendo para VB6.0 herramientas mas completas

Lo de "mejor" o "peor" es relativo. Porque quizás en cierto momento y para cierto proyecto en concreto, tu librería resulta más cómoda que ese engine que has citado.

¿Puedes adelantar algo de ese proyecto "secreto"? ¿O es secreto del todo?
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Vicente en 13 de Marzo de 2008, 12:32:58 PM
Loover: en el Visual Studio Team Suite, en las propiedades de proyecto tienes una cosa llamada Code Analysis. Te hace un análisis estático del código cada vez que compila y te da warnings o errores siguiendo normas de estilo, calidad de código,...

La versión gratis de esto se llama FxCop:

http://en.wikipedia.org/wiki/FxCop

La verdad que son la leche como herramientas, pero solo si las ejecutas desde el principio del proyecto porque está tirado no cumplir las normas de diseño sin darte cuenta :p

Respecto a las librerías, el pago y tal. Yo en JadE no quise hacerlo de pago porque si ya tienes un cierto compromiso cuando la gente no te paga, cuando te paga ya vamos :p Y no estaba seguro de querer ese compromiso ni de ser capaz de atenderlo de forma correcta. Imagínate que pagas 100, 200, 300, X euros para un engine/librería y luego el soporte que te dan es más malo que el pan...

Lo que si me he planteado es poner un sitio para donativos en la web, sobre todo después de leer este artículo de Coding Horror:

http://www.codinghorror.com/blog/archives/000993.html

Me parece que lo que el tío dice tiene mucho sentido y es cierto que el proyecto tiene algunos gastos (nombre de dominio + forward, hosting,...) pero a parte de eso, no se me ocurre en que se podría gastar el dinero de las donaciones.

Qué os parece? Un saludo!

Vicente

Edit: me he cubierto de gloria con los duplicados...
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: [EX3] en 13 de Marzo de 2008, 03:31:05 PM
Cita de: "Loover"Lo de "mejor" o "peor" es relativo. Porque quizás en cierto momento y para cierto proyecto en concreto, tu librería resulta más cómoda que ese engine que has citado.
No te digo que no, seguramente sea falta de confianza o que no lo valoro lo suficiente. Oviamente para mi en lo personal tiene un valor muy significativo y me resuelve la vida, pero a estas alturas todavia no tengo claro que valor real tiene para la poca gente que lo esta utilizando.

Cita de: "Loover"¿Puedes adelantar algo de ese proyecto "secreto"? ¿O es secreto del todo?
No es ningun secreto de estado pero si me gustaria esperar un tiempo para ver si la cosa evoluciona favorablemente y entonces dar la sorpresa :) Resumidamente, TLSA "Renovatio", los restos del TLSA Engine en Visual Basic 6.0, es un pequeño framework que estoy desarrollando con SiPoX para reutilizar la dx_lib32 en .NET de forma comoda y optima en proyectos propios. Ahora mismo no tengo muchas capturas que mostrar a excepcion de una prueba del motor de iluminacion dinamica (vertex color + specular) que aun tengo que trabajar o abandonar segun evolucione para bien o para mal :D

Salu2...
Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: LC0 en 13 de Marzo de 2008, 05:41:49 PM
Lo que más me gusta de las documentaciones son las redundancias; cosas que tienes que poner pero que, realmente, poco dicen:

Citar

SceneManager& Root::getSceneManager()


Gets the Scene Manager

Returns:
The Scene Manager.

Título: Problema Desde Una Dll - Y divagaciones 5 años después
Publicado por: Loover en 13 de Marzo de 2008, 07:49:13 PM
Sí, pero solo con la Api Reference, te quedas corto.

A la gente le gusta ir leyendo un tutorial y para cada funcíon que aparece, pues ya consulta la Api reference. Lo uno va de la mano con lo otro y ambos son muy importantes.

Y todo, en general, lleva bastante tiempo hacerlo.