/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Errores de linkado con el ddraw, en vc++ y dev c++

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
dadel



Registrado: 17 Sep 2007
Mensajes: 4

MensajePublicado: 17/09/2007 1:25 pm
Título: Errores de linkado con el ddraw, en vc++ y dev c++

Hola, he estao aprendiendo a programar con directx y vc++, pero a la hora de linkar me da estos problemas:

Linking...
game.obj : error LNK2001: unresolved external symbol _DirectDrawCreate@12
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/game.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

game.exe - 3 error(s), 0 warning(s)

He estao investigando por la red y he encontrao solucion para el error del ddraw, pero me suiguen fallando los otros dos!!! Alguien sabe como solucionarlos??

Tambien e probao ,en el dev c++. Con el, el error de synbol_main no me lo da, pero no se solucionar mi problemita con el ddraw ni el otro mensaje. Logicamente tambien me vale una solucion que se utilizara en este compilador.

por ultimo queria decir que me a parecido leer en una web (que lo leyera es otra cosa) que el error de symbol_main es porke no uso main(), sin embargo la mia es una aplicacion de consola y el uso del Winmain esta perfecto, asique en resumen........ que alguien me ayude!!!!!!!!!!!!!!! Crying or Very sad
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 17/09/2007 1:51 pm
Título:

dadel escribió:
sin embargo la mia es una aplicacion de consola y el uso del Winmain esta perfecto

Pues no es correcto, la entrada del programa en un proyecto "Console" es int main(...), en cambio en un proyecto "Win32" es int APIENTRY WinMain(..).
Creo que también no estás vinculando la libreria ddraw.lib al proyecto.
Mirá, un proyecto Win32 Application, en la versión 6.0 de VC++ quedaría asi:
Código:

#include "stdafx.h"

#include <ddraw.h>

//Menu: Project-> Settings-> solapa Links...
// o manualmente asi:
#pragma comment(lib,"ddraw.lib")

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
   return 0;
}

Saludos.
Volver arriba
dadel



Registrado: 17 Sep 2007
Mensajes: 4

MensajePublicado: 18/09/2007 6:01 am
Título: Gracias pero...

Gracias pora aclaracion, pero aqui llegamos al meollo del problema.

La primera solucion sobre el ddraw me a ayudado, a eliminar el error "undefined reference to `DirectDrawCreate@12' " en el vc++, pero no en el dev c++.

Por contra, la segunda me a aclarado las ideas y ayudado a encontrar la funcion WinMain que SI esta en el codigo y que el VC++ NO reconoce mientras que el dev-c++ SI.

Aqui tienes esa parte del codigo:



Código:
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
    MSG         msg;

    lpCmdLine = lpCmdLine;
    hPrevInstance = hPrevInstance;

    //En caso de que fallara la inicializacion, se retorna FALSE.
    if( !doInit( hInstance, nCmdShow ) )
    {
        return FALSE;
    }


Este pedazo de codigo es copiado, y por lo tanto no tengo la capacidad de revisarlo.

Como puedes ver la cosa es, que tengo un problema que se solucionar en el visual c++ y no en el dev-c++, y otro distinto que no me sale en el dev-c++ y si en el visual c++.


Asique de nuevo tengo que pedir que aportes un poquito de luz a todo esto!! jeje.


[/code]
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 18/09/2007 6:32 am
Título:

La convencion de llamada para el entri point (main) es WINAPI que es lo mismo que la llamda estandar __stdcall.
Un main tipico:

Código:
int WINAPI WinMain (HINSTANCE hTh, HINSTANCE hPr, LPSTR lps, int n)
{  /*        */

   
return 0;
}

Esto deberia de funcionar en cualquier compilador windows.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
dadel



Registrado: 17 Sep 2007
Mensajes: 4

MensajePublicado: 18/09/2007 7:12 am
Título:

Pues parece que a mi compilador (visual c++ 6) le gusta llevar la contraria,jeje, porque asi me sigue dando:

LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/game.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Es un fallo del compilador o que????


Ultima edición por dadel el 18/09/2007 10:59 am; editado 1 vez
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 1372
Ubicación: En ecx esperando un call

MensajePublicado: 18/09/2007 7:36 am
Título:

A ver si podemos hacer algo.
1) Que sea un proyecto para windows.
2) En las opciones de proyecto elimina el flag precompiled headers
3) Revisa los path (rutas de las librerias necesarias).
4) Dependencias del linker, esto es incluir las librerias necesarias al proyecto.
5) Tomarse un cervecilla e intentarlo en otro momento.

S2.
_________________
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
- Ralo es mejor que denso.
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 18/09/2007 7:40 am
Título: Re: Gracias pero...

dadel escribió:
La primera solucion sobre el ddraw me a ayudado, a eliminar el error "undefined reference to `DirectDrawCreate@12' " en el vc++, pero no en el dev c++.
Claro, porque en el Dev-C++ la libreria se titula libddraw.a, además el comando #pragma.... es propio del MSVC. No tengo mucha práctica en el entorno Dev-C++, asi que deberás buscar como enlazar las librerias.
Sobre el APIENTRY y WINAPI, otra vez tiene que ver con el entorno. Estas, convenciones de llamadas como aclara cheroky, se escriben automáticamente al crear un proyecto. Además en Dev-C++ incluye el 'header' <windows.h> directamente en el módulo principal, mientras que en VC++ dicho 'header' se encuentra en 'stdafx.h' ya que utiliza 'Precompiled Headers', aunque no siempre debe ser asi.Todo esto según versión 6.0, desconozco las posteriores.

Saludos.
Volver arriba
daltomi



Registrado: 28 Abr 2007
Mensajes: 114
Ubicación: Argentina

MensajePublicado: 18/09/2007 8:01 am
Título:

Vamos paso a paso:
1. Inicia Visual C++(v.6.0).
2. Menu File->New..solapa Projects...selecionas Win32 Application, titulo cualquiera.
3.En la ventana que aparece seleciona:'A simple Win32 Application'
4. No compiles(v.Compilar), debes hacer esto: Menu Build-> Rebuild All.
Eso no debería dar ningun error: '0 error(s), 0 warning(s)'

Saludos.
Volver arriba
dadel



Registrado: 17 Sep 2007
Mensajes: 4

MensajePublicado: 18/09/2007 10:47 am
Título:

Sobre lo tuyo daltomi, he seguido todo paso a paso y todo perfecto. Ningun problema. 0 errores 0 warnings
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com