| |||||
| Dernière réponse | |
|---|---|
| Sujet : [Win32/C/C++] Afficher les cartes de CARDS.DLL dans un DC | |
| spark | Je dois faire un jeu de cartes et j'ai donc pensé à utiliser la dll CARDS.DLL qui contient un jeu de cartes et les fonctions pour les afficher.
J'ai donc commencé ma p'tite classe Card dont voici le code: Card.h: class Card { private: HINSTANCE m_hDllInstance; typedef void (*InitializePtr)(int, int); typedef int (*DrawPtr)(HDC, int, int, int, int, int); typedef void (*TerminatePtr)(void); public: Card(); virtual ~Card(); void Render_Card(HDC, int, int, int); }; Card.cpp: #include "Card.h" Card::Card() { // On charge la DLL des cartes en mémoire m_hDllInstance = LoadLibrary("CARDS.DLL" ); if( m_hDllInstance != NULL ) { InitializePtr fptr; // On recupere un pointeur sur la fonction d'initlisation de la DLL fptr = (InitializePtr) GetProcAddress( m_hDllInstance, "cdtInit" ); if( fptr != NULL) { int Width, Height; MessageBox(NULL,"Coucou","",MB_OK); // Appel de la fonction de la DLL fptr(Width, Height); } } } Card::~Card() { if( m_hDllInstance != NULL ) { TerminatePtr fptr; // Recuperation de l'adresse de la fonction de fin d'utilisation fptr = (TerminatePtr) GetProcAddress(m_hDllInstance, "cdtTerm" ); if( fptr != NULL) { // Appel de la fonction de la DLL fptr(); } // On libère la DLL de la mémoire FreeLibrary(m_hDllInstance); } } void Card::Render_Card(HDC hDC, int x, int y, int CardNumber) { if( m_hDllInstance != NULL ) { DrawPtr fptr; //Recuperation de l'adresse de la fonction de dessin fptr = (DrawPtr) GetProcAddress(m_hDllInstance, "cdtDraw" ); if( fptr != NULL) { int Ret; Ret = fptr(hDC, x, y, CardNumber, 0, GetBkColor(hDC)); } } } Et Forcément, ca marche pas du tout.... on s'en serait douté. J'ai peut etre rien compris aux pointeurs de fonctions parce que c des que je veux appeller la fonction pointée que ca plante. Pour info, je me suis basé sur un truc VB et la déclaration des fonctions de la dll est la suivante : Declare Function cdtInit Lib "Cards.Dll" (dX As Long, dY As Long) As Long Declare Function cdtDraw Lib "Cards.Dll" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal iCard As Long, ByVal iDraw As Long, ByVal clr As Long) As Long Declare Function cdtTerm Lib "Cards.Dll" () As Long Merci à celui qui trouvera ce qui foire... |
| Vue Rapide de la discussion |
|---|