Erreur de lien dans avec visual c++

Résolu
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010 - 1 févr. 2007 à 21:22
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010 - 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.)

5 réponses

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

En fait il me suffisait d'inclure la librairie "ddraw.lib" au projet.
Merci.
3
bioopovega Messages postés 22 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 18 août 2009 28
2 févr. 2007 à 06:36
bonjour,

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

bioopo
0
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010
2 févr. 2007 à 10:39
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.
0
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010
2 févr. 2007 à 14:08
Désolé,
J'ai oublié de précis que j'était en mode Release.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
seb2086 Messages postés 96 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 1 février 2010
2 févr. 2007 à 14:35
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.
0
Rejoignez-nous