Erreur de lien dans avec visual c++ [Résolu]

seb2086 96 Messages postés lundi 25 avril 2005Date d'inscription 1 février 2010 Dernière intervention - 1 févr. 2007 à 21:22 - Dernière réponse : seb2086 96 Messages postés lundi 25 avril 2005Date d'inscription 1 février 2010 Dernière intervention
- 2 févr. 2007 à 16:28
Bonjour,

Lors de la compilation de mon projet j'ai une erreur :
Error    13    error LNK2028: unresolved token (0A000033) "extern "C" long __stdcall DirectDrawCreateEx(struct _GUID *,void * *,struct _GUID const &,struct IUnknown *)" (?DirectDrawCreateEx@@$$J216YGJPAU_GUID@@PAPAXABU1@PAUIUnknown@@@Z) referenced in function "public: void __thiscall Commandes_2D::Init_DDraw(struct HWND__ *)" (?Init_DDraw@Commandes_2D@@$$FQAEXPAUHWND__@@@Z)    Commandes_2D.obj

Cette erreur apparait lorsque  que j'inclus dans le projet le fichier Commandes_2D.cpp et Commandes_2D.h.

Si quelqu'un sais comment résoudre cette erreur cela m'aiderait beaucoups.
Merci.
(si il vous manque des infos pour comprendre d'où provient l'erreur faites moi signe.)
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
seb2086 96 Messages postés lundi 25 avril 2005Date d'inscription 1 février 2010 Dernière intervention - 2 févr. 2007 à 16:28
3
Merci
C'est bon j'ai trouvé.

En fait il me suffisait d'inclure la librairie "ddraw.lib" au projet.
Merci.

Merci seb2086 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de seb2086
bioopovega 33 Messages postés jeudi 28 décembre 2006Date d'inscription 18 août 2009 Dernière intervention - 2 févr. 2007 à 06:36
0
Merci
bonjour,

tu as un probleme dans tes fichiers cités, donnes les nous.

bioopo
Commenter la réponse de bioopovega
seb2086 96 Messages postés lundi 25 avril 2005Date d'inscription 1 février 2010 Dernière intervention - 2 févr. 2007 à 10:39
0
Merci
Je te met donc les fichiers Commandes_2D.h et .cpp

/*-----------------------------------------------------------------------------------
    Nom du fichier       : Commandes_2D.h                 
-----------------------------------------------------------------------------------*/
// Permet d'éviter les problémes liés aux include
#ifndef _COMMANDES_2D_H
#define _COMMANDES_2D_H

/*-----------------------------------------------------------------------------------
                                  Fichiers Includes                                 
-----------------------------------------------------------------------------------*/
#include <windows.h>
#include <ddraw.h>            //nécessaire au fonctionnement de DDraw

/*-----------------------------------------------------------------------------------
                                 Classe Commandes_2D                 
-----------------------------------------------------------------------------------*/
class Commandes_2D
{
    public :

        void Init_DDraw(HWND hwnd) ;
        void LoadSurface(LPDIRECTDRAWSURFACE7 lpDDS, LPSTR szImage, int larg, int haut) ;
        void Affichage() ;
        void Release_DDraw() ;

    private :

        // Variables utilisées par DDraw
        HWND                    hwndfm ;         // Identificateur de l'application
        DDSCAPS2                ddscaps ;         // Dtructure de capacités de surface
        DDSURFACEDESC2            ddsd ;             // Description de la surface
        LPDIRECTDRAW7            lpDD ;             // Objet DirectDraw
        LPDIRECTDRAWSURFACE7    lpDDSPrimary ;     // Surface primaire DirectDraw
        LPDIRECTDRAWSURFACE7    lpDDSBack ;         // Backbuffer DirectDraw

        // Surfaces offscreen contenant les images bitmaps
        LPDIRECTDRAWSURFACE7    lpDDSFond ;         // Image de fond
        LPDIRECTDRAWSURFACE7    lpDDSSprites01 ; // Sprite "Ouvrir"

        // Résolution de l'écran
        unsigned int WIDTH ;
        unsigned int HEIGHT ;
        unsigned int BITS_PER_PIXELS ;
};
#endif

/*-----------------------------------------------------------------------------------
    Nom du fichier       : Commandes_2D.cpp             
-----------------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------------
                                    Définitions                                    
-----------------------------------------------------------------------------------*/
// Nombre de backbuffers du programme
#define BUFFERS    1

// Macro très pratique pour supprimer les objets#define RELEASE(a)    if (a !NULL)    {a -> Release(), a NULL ;}

// Macro permettant de creer une surface et chargeant une bitmap dans cette surface#define CREER_SURFACE(a,b,c,d) ddsd.dwWidth c, ddsd.dwHeight d, lpDD -> CreateSurface(&ddsd, &a, NULL), LoadSurface(a, b ,0,0) ;

/*-----------------------------------------------------------------------------------
                                  Fichiers Includes                                 
-----------------------------------------------------------------------------------*/
#include "Commandes_2d.h"

/*-----------------------------------------------------------------------------------
   Nom           : Init_DDraw()
   Description : Initialise les objets DDraw
-----------------------------------------------------------------------------------*/
void Commandes_2D :: Init_DDraw(HWND hwnd)
{
    // Résolution de l'écran
    WIDTH           = 1024 ;
    HEIGHT          = 768 ;
    BITS_PER_PIXELS = 32 ;

    // Variables utilisées par DDraw
    lpDDSPrimary    = NULL ;   
    lpDDSBack       = NULL ;   
    lpDDSFond       = NULL ;           
    lpDDSSprites01  = NULL ;

    // Identificateur de l'application
    hwndfm          = hwnd ;

    // Création de l'objet DirectDraw
    DirectDrawCreateEx(NULL, (void**)&lpDD, IID_IDirectDraw7, NULL) ;

    // On demande le mode exclusif (priorité au niveau de Windows)
    lpDD -> SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN |DDSCL_ALLOWREBOOT) ;

    // Définition du mode vidéo
    lpDD -> SetDisplayMode(WIDTH, HEIGHT, BITS_PER_PIXELS, 0, 0) ;

    // Création de la surface primaire associée à un backbuffer
    memset (&ddsd, 0, sizeof (DDSURFACEDESC2)) ;        // Initialisation de la structure
    ddsd.dwSize = sizeof( DDSURFACEDESC2 ) ;
    ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT ;    // On associe un backbuffer à la surface

    // Les flags suivants décrivent la surface comme étant primaire,
    // associée à un backbuffer, et chargée en mémoire vidéo
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY ;
    ddsd.dwBackBufferCount = BUFFERS ;                    // Nombre de buffers associés à la surface
    lpDD -> CreateSurface(&ddsd,&lpDDSPrimary,NULL) ;

    // On crée un pointeur vers le back buffer pour permettre le flipping des deux surfaces
    ZeroMemory(&ddscaps, sizeof(ddscaps));                // Initialisation de la structure
    ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
    lpDDSPrimary -> GetAttachedSurface(&ddscaps,&lpDDSBack) ;

    // Sélection du noir comme clé de couleur transparente
    ddsd.ddckCKSrcBlt.dwColorSpaceLowValue = 0 ;
    ddsd.ddckCKSrcBlt.dwColorSpaceHighValue = 0 ;

    //Description des surfaces offscreen de l'exemple 
    //Il n'est pas utile de répéter ces opération pour chaque surface car
    //la description ddsd ne s'efface pas entre deux création de surface
    memset(&ddsd, 0, sizeof(DDSURFACEDESC2)) ;            //initialisation de la structure
    ddsd.dwSize = sizeof(DDSURFACEDESC2) ;

    // Description de la surface, notamment pour la clé de couleur associée (DDSD_CKSRCBLT)
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_CKSRCBLT ;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;

    // Création des différentes surfaces (cf macro CREER_SURFACE en début de fichier)
    CREER_SURFACE(lpDDSFond, "Images\\Menu Démarrage\\Menu_ Demarrage.bmp", 640, 480) ;
    CREER_SURFACE(lpDDSSprites01, "Images\\Menu Démarrage\\MD_Jouer.bmp", 136, 37) ;
}

/*-----------------------------------------------------------------------------------
   Nom           : LoadSurface()
   Description : Charge un bitmap dans une surface
-----------------------------------------------------------------------------------*/
void Commandes_2D :: LoadSurface(LPDIRECTDRAWSURFACE7 lpDDS, LPSTR szImage, int larg, int haut)
{
    HBITMAP         hbm ;                // Objet bitmap
    HDC             hdcImage = NULL ;    // Identificateur de l'image
    HDC             hdcSurf  = NULL ;    // Identificateur de la surface associée
    BOOL            bReturn  = FALSE ;

    // Initialisation de la structure
    ZeroMemory(&ddsd,sizeof(ddsd)) ;
    ddsd.dwSize = sizeof(ddsd) ;

    // On demande la description de la surface
    if(FAILED(lpDDS->GetSurfaceDesc(&ddsd)))    goto Exit ;

    // Chargement de l'image dans un HBITMAP.    if(larg 0 && haut 0)   
    {   
        hbm = (HBITMAP)LoadImage( NULL, szImage, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION |LR_DEFAULTSIZE) ;
    }

    else
    {
        hbm = (HBITMAP)LoadImage( NULL, szImage, IMAGE_BITMAP, larg, haut, LR_LOADFROMFILE | LR_CREATEDIBSECTION) ;
    }

    // On sélectionne l'image à associer à la surface
    hdcImage = CreateCompatibleDC(NULL) ;
    SelectObject(hdcImage, hbm) ;

    // Obtient un DC pour la surface
    lpDDS -> GetDC(&hdcSurf) ;

    //Chargement final dans la surface avec conversion de format si nécessaire
    BitBlt(hdcSurf, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, 0, 0, SRCCOPY) ;

    Exit :

    // On supprime les objets créés
    if(hdcSurf)  lpDDS -> ReleaseDC(hdcSurf) ;
    if(hdcImage) DeleteDC(hdcImage) ;
    if(hbm)      DeleteObject(hbm) ;
}

/*-----------------------------------------------------------------------------------
   Nom           : Affichage(
   Description : Affiche les Sprites
-----------------------------------------------------------------------------------*/
void Commandes_2D :: Affichage()
{
    // Affichage du fond (des rectangles NULL indiquent que l'on prend toute la surface)
    lpDDSBack -> Blt(NULL, lpDDSFond, NULL, DDBLT_WAIT, NULL) ;

    // Flipping de la surface primaire avec le BackBuffer
    lpDDSPrimary -> Flip(NULL, DDFLIP_WAIT) ;
}

/*-----------------------------------------------------------------------------------
   Nom           : Release_DDraw()
   Description : Supprime les surfaces et l'objetDDraw
-----------------------------------------------------------------------------------*/
void Commandes_2D :: Release_DDraw()
{
    // Suppression des objets dans l'ordre inverse dans lequel ils ont été créés
    if(lpDD != NULL)
    {
        if(lpDDSPrimary != NULL)
        {
            RELEASE(lpDDSSprites01) ;
            RELEASE(lpDDSFond) ;
            RELEASE(lpDDSBack) ;
            RELEASE(lpDDSPrimary) ;
        }

        lpDD -> Release() ;
        lpDD = NULL ;
    }
}

Dis moi si il te faut autre chose.
Merci.
Commenter la réponse de seb2086
seb2086 96 Messages postés lundi 25 avril 2005Date d'inscription 1 février 2010 Dernière intervention - 2 févr. 2007 à 14:08
0
Merci
Désolé,
J'ai oublié de précis que j'était en mode Release.
Commenter la réponse de seb2086
seb2086 96 Messages postés lundi 25 avril 2005Date d'inscription 1 février 2010 Dernière intervention - 2 févr. 2007 à 14:35
0
Merci
En fait le probleme persiste en mode debug (en mode release j'ai d'autres erreurs de ce style qui appraissent)
J'ai trouvé d'où viens le probleme iol viens de cette fonction :

 // Création de l'objet DirectDraw
    DirectDrawCreateEx(NULL, (void**)&lpDD, IID_IDirectDraw7, NULL) ;

Quand je la met en commentaire je n'ai plus d'erreurs.
Mais je ne sais pas pourquoi il y a un probleme donc si quelqu'un a une idée ;)

Merci de votre aide.
Commenter la réponse de seb2086

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.