begin process at 2012 02 13 02:24:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Erreur de lien dans avec visual c++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Erreur de lien dans avec visual c++

jeudi 1 février 2007 à 21:22:12 | Erreur de lien dans avec visual c++

seb2086

Membre Club
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.)

vendredi 2 février 2007 à 06:36:01 | Re : Erreur de lien dans avec visual c++

bioopovega

bonjour,

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

bioopo
vendredi 2 février 2007 à 10:39:45 | Re : Erreur de lien dans avec visual c++

seb2086

Membre Club
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.

vendredi 2 février 2007 à 14:08:03 | Re : Erreur de lien dans avec visual c++

seb2086

Membre Club
Désolé,
J'ai oublié de précis que j'était en mode Release.
vendredi 2 février 2007 à 14:35:42 | Re : Erreur de lien dans avec visual c++

seb2086

Membre Club
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.
vendredi 2 février 2007 à 16:28:07 | Re : Erreur de lien dans avec visual c++

seb2086

Membre Club
Réponse acceptée !
C'est bon j'ai trouvé.

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


Cette discussion est classée dans : erreur, commandes, guid, struct, 2d


Répondre à ce message

Sujets en rapport avec ce message

erreur en opengl :( [ par intello2001 ] c:\documents and settings\administrator\mes documents\ogl3\ogl3\untitled1.o(.text+0x71f):untitled1.cpp: undefined reference to `auxDIBImageLoadA@4'c s passage de structure a un thread [ par anthonycosson ] bijour tout le monde g un pb qui me blocje voudrai savoir comment passer une structure a AfxBeginThread et récupéré les donner précédement enregistrer Problème de char et dans une struct [ par yggy ] dans ce code : il me dit une erreur après le char dbmdp[7][5] je vois pas mon erreur!ai-je fait quelque chose de faux?struct ServerTest1{   char dbmdp Erreur structure, redéfinition [ par unikaz ] Bonjour à tous,Je me trouve (en tant que débutant) confronté à un problème que je n'arrive pas à résoudre (malgrès de longues recherches sur les forum erreur [ par nomadstorm ] Bonjour j'ai besoin d'aide pour corriger cet erreur,j'aime savoir sa signification In instantiation of `std::iterator_traits': instantiated from he erreur compilation [ par selmaensi ] j'ai une erreur au niveau de la compilation d'programme en turboC++à la ligne:"T[i].pointeur=(struct cellule *)malloc(struct cellule)" le compilaterur Encore une... "Erreur de segmantation" !! [ par TriFidEly ] Bonjour,Je suis en train de coder mon premier -vrai- programme, un Othello pour ma L2... mais j'ai un problème à l'exécution : "Une violation d'accès Erreur de segmentation [ par yansei ] Bonjour à tous, voilà j'ai créé il y de cela un mois un programme permettant de créé une liste de fichier à des dates différentes.Tout fonctionnais bi Erreur sous Visual C++ 2008 [ par wallie0703 ] Bonjour a tous!!Je travaille sous Visual C++ que je ne connais pas encore très bien...j'ai une erreur que je ne comprend pouvez me l'expliquer svp!!1> Probleme de redéfinition dans une structure [ par Manubbosse ] Bonjour à tous.Je suis stagiaire dans une entreprise et je dois (entre autre) programmer un coeur de calcul (en C++) à intégrer dans un logiciel.Malhe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales