Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Dev-cpp: Usar Dll's Creadas Con Vc

Iniciado por ALRAZ, 13 de Octubre de 2005, 05:50:53 AM

« anterior - próximo »

ALRAZ

 wenas  (ole) .

He vuelto con mis preguntillas atarantadoras  :lol:

Sucede que he estado trasteando un poco con Dev-cpp
y, en un intento por hacer todo mi código más porteable, pase un proyecto que tengo (de hecho el único >_>) a dev-cpp para ver que tan porteable soy  (rules)

El problema viene porque el proyecto en su estado original (Visual Studio .net) utiliza muchas DLLs:
-SDL
-SDL_image
-SDL_mixer
-AngelScript
(entre otras que no vienen al caso)

la cosa está en que...

al intentar usar los .lib de esas DLLs (compiladas en VC), el compilador del dev-cpp
no me dice que no debo usar esos archivos
en lugar de eso, se conforma con darme varios errores de linkeo de "undefined symbol"

eso lo solucioné para el caso de SDL usando las "development libraries" para MinGW
en pocas palabras: me bajé los .a de SDL

el problema es que no hay .a para SDL_image ni sdl_mixer
peor aún con AngelScript, que ni siquiera se distribuye como librería, sino que te dan todo el código fuente

para no hacer más largo el cuento:
al compilar con visual studio y con dev-cpp, obtengo dlls totalmente distintas, y si compilo una DLL con Dev-cpp, no la puedo usar con Visual Studio, y vice versa.
SDL viene con una DLL precompilada, que es la misma tanto para MinGW como para VS



la pregunta del millón es:
como hago pa tener una sola DLL que funcione con cualquier compilador?
(tal y como hicieron los de SDL)




o sea, crear los .a a partir de los .lib
o los .lib a partir de los .a
o que sé yo XD

soy totalmente newbie en esto de GNU, g++, mingw, bla bla bla (nooo)

synchrnzr

 Busca en el google información sobre decorations y DLLs. Echa un vistazo a esto también: http://wyw.dcweb.cn/stdcall.htm.

sync

TheAzazel

 La respuesta rapida: CON C++ NO SE PUEDE.

Y ahora diras... joer, pero si SDL lo hace no? si, lo hace, pero porque es C normal y casi todos los compiladores generan las mismos "nombres internos", el mismo paso de parametros, etc.. con lo que el linker lo encontrara y el ejecutable funcionara.

Por lo que si tu proyecto esta en C, podrias hacer esto. Pero apaga y vamonos si estas usando C++. Hay cada compilador llama de una forma a las funciones, y las pasa los paramentros como le viene en gana jeje, por lo que... tendras que compilar para cada compilador(como he hecho yo con mi lib).

Podrias llegar mas lejos y decir...joder pues por ejemplo, las DirectX estan en C++ y no hay una version para compilador...alli la respuesta es complicada... eso esta basado en interfaces COM... que son un lio, por lo menos para mi.

Yo ya me pegue con este tema hace un tiempo y la solucion fue... "Un codigo para compilarlos(y controlarlos jeje) a todos... y una libreria para cada compilador"

saludos

ALRAZ

 ok, por si a alguien le interesa:

precisamente anoche "encontré" una herramienta que viene con el MinGW  :lol:
se llama
reimp.exe

y sirve para crear archivos .a a patir de un .lib
(no sé si lo contrario también aplique, y francamente no me preocupa  :P )

el único inconveniente es que, en efecto, sólo funciona con funciones (valga la rebusnancia) de C
y no con C++

para el caso de AngelScript, que es el que usa C++ de las que estoy usando:
exporta todas las funcione C, pero nada de C++
no marca error al compilar, pero al momento de intentar ejecutarlo, se cuelga
marcando un error en AngelScript.dll


Si alguien tiene más información, bienvenido sea  (uoh)  

ALRAZ

 ok, por si a alguien le interesa:

precisamente anoche "encontré" una herramienta que viene con el MinGW  :lol:
se llama
reimp.exe

y sirve para crear archivos .a a patir de un .lib
(no sé si lo contrario también aplique, y francamente no me preocupa  :P )

el único inconveniente es que, en efecto, sólo funciona con funciones (valga la rebusnancia) de C
y no con C++

para el caso de AngelScript, que es el que usa C++ de las que estoy usando:
exporta todas las funcione C, pero nada de C++
no marca error al compilar, pero al momento de intentar ejecutarlo, se cuelga
marcando un error en AngelScript.dll


Si alguien tiene más información, bienvenido sea  (uoh)


EDIT:
Parece que angelscript tiene algunos templates y cosas raras para encargarse del manejor de los punteros a clases
preguntaré en su foro...

ALRAZ

 bueno, enterado todo eso...
se me ocurrió...

que tal si tengo una Clase X y le quiero pasar como parámetro su dirección de memoria a una función que está en una DLL?

ejemplo:


//Esto iría en el .H de la DLL
class Obj
{
 int X, Y, Z;
 std::string Texto;

 [...]
}

//Esta función estaría en una DLL
int FuncionGuapa (Obj *Src)
{
  Src->X += _AlgunValorRaro;
  [...]

  return _Todo_Salio_Bien;
}


habría problemas si usara la DLL compilada en VC y el .exe compilado en Dev-cpp?


Nota: Alguien borre ese double post que hice arriba






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.