[Win32/C/C++] Afficher les cartes de CARDS.DLL dans un DC

Afficher les cartes de CARDS.DLL dans un DC [Win32/C/C++] - Programmation

Marsh Posté le 15-01-2002 à 20:37:24    

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

Reply

Marsh Posté le 15-01-2002 à 20:37:24   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed