Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Drácula en 01 de Enero de 1970, 01:00:00 AM

Título: pragma linker
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Recuerdo que leí hace un tiempo que se podía incluir un

#pragma comment(linker,???)

para que en un archivo.cpp se informara al linkador de qué librerías tenía que incluir.

Pero lo he probado y no me funciona.

¿Sabeis algo de esto?
                               
Título: pragma linker
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Vaya, he encontrado algo en Google!! No lo he probado, pero lo pongo aquí por si a alguien le interesa.

#pragma comment (lib, "mylib.lib")
                               
Título: pragma linker
Publicado por: Astat en 01 de Enero de 1970, 01:00:00 AM
                                Pues te confirmo que eso funciona. Es lo que uso yo para linkar con D3D.

                               
Título: pragma linker
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                es como muy bien dijo astat, es con la directiva #pragma comment

de todas formas, y ya que estamos con las directivas, en este caso, mas que una directiva, mi duda es la siguiente:

cual es la diferencia entre _cdecl y _declspec? uso _declspec para, por ejemplo, alinear las variables en la memoria y que asi vayan mucho mejor a la cache del micro, pero he visto en muchos codigos lo del _cdecl y no tengo ni idea de para que es...

me podeis ayudar?

Gracias
                               
Título: pragma linker
Publicado por: Javier en 01 de Enero de 1970, 01:00:00 AM
                                El _cdecl se usa para establecer la convención de llamada estándar de C y C++, esto incluye el orden en el que se pasan los parámetros en las funciones y la forma en que se extraen, la gestión de la pila, etc.

Entre otras cosas se usa para distinguirlo del _stdcall, que emplea una convención de llamada diferente. Por ejemplo cuando por defecto un compilador trata todas las funciones como _stdcall, pues puedes usar _cdecl para decirle que tus funciones van a seguir esa convención.

Espero haberme explicado bien...

El _declspec se emplea para declarar "atributos extendidos" específicos de Microsoft, como puede ser dllexport para exportar funciones en una DLL, naked para definir una función "a pelo" que no incluya gestión de pila, etc.

                               
Título: pragma linker
Publicado por: fiero en 01 de Enero de 1970, 01:00:00 AM
                                Hola
no sabia lo de "naked", lo acabo de probar y mola como queda el código (por no poner no pone ni el ret :sonriendo: ), la función en la que lo he probado no tiene parametros, lo que pasa es que solo me funciona en modo debug, si lo compilo en release se me cuelga, ¿sabeis por que puede ser? ¿las llamadas a funciones se compilan igual no?

un saludo                                
Título: pragma linker
Publicado por: Emotion en 01 de Enero de 1970, 01:00:00 AM
                                Gracias por la aclaracion :sonriendo:

Saludos
                               
Título: pragma linker
Publicado por: Javier en 01 de Enero de 1970, 01:00:00 AM
                                Fiero, si has hecho una función naked, ten en cuenta que tienes que hacer tú mismo toda la gestión de pila, volver de la función, etc. Por ejemplo:

push ebp
pushad
.
.
.
popad
pop ebp
ret

Si no restauras correctamente los registros, te puede pasar cualquier cosa.                                
Título: pragma linker
Publicado por: fiero en 01 de Enero de 1970, 01:00:00 AM
                                sip, ya veo, hay que tener cuidado con eso...

un saludo