010
10.02.2006, 23:13 Uhr
xXx
Devil
|
hmm ok... ich hab ne kleine C++ Klasse geschrieben... eigentlich sollte es funzen... scheinbar stimmt aber etwas mit den Params die ich der Funktion aus der DLL übergeb... nuja.. vllt findet jemand meinen (dummen) Fehler... also hier mal der src:
Header-Datei
C++: |
#pragma once
#include <windows.h>
#define CS_FACEUP 0 // Draw card face up #define CS_FACEDOWN 1 // Draw card face down #define CS_HILITE 2 // Same as FaceUp except drawn inverted #define CS_GHOST 3 // Draw a ghost card -- for ace piles #define CS_REMOVE 4 // draw background specified by color #define CS_INVISIBLE_GHOST 5 // ? #define CS_DECKX 6 // Draw X #define CS_DECKO 7 // Draw O
enum eSUIT { CLUBS = 0, DIAMOND = 1, HEARTS = 2, SPADES = 3 };
enum eRANK // Ich weiß nicht ob ich die beiden enums brauche... eigentlich nicht ;) mal sehen... { ACE = 0, TWO = 1, THREE = 2, FOUR = 3, FIVE = 4, SIX = 5, SEVEN = 6, EIGHT = 7, NINE = 8, TEN = 9, JACK = 10, QUEEN = 11, KING = 12 };
typedef bool (__stdcall*cdtInit)(int iWidth, int iHeight); typedef void (__stdcall*cdtTerm)(); typedef bool (__stdcall*cdtDraw)(HDC hdc, int x, int y, int iCard, int iMode, long lColor); typedef bool (__stdcall*cdtDrawExt)(HDC hdc, int x, int y, int dx, int dy, int iCard, int iMode, long lColor); typedef bool (__stdcall*cdtAnimate)(HDC hdc, int iCardBack, int x, int y, int iFrame);
class CCardsDLL { public: CCardsDLL(void); ~CCardsDLL(void);
public: HINSTANCE m_hCardsDll; // Handle (cards.dll) bool m_bIsLoaded;
public: bool Init(void); void Destroy(void); bool drawCard(HDC hdc, int x, int y, int iCard, int iMode, long lColor); bool drawCardBack(HDC hdc, int x, int y, int iCard); bool drawAnimatedBack(HDC hdc, int x, int y, int iCard, int iFrame); bool drawInvertedCard(HDC hdc, int x, int y, int iCard); bool drawEmptyCard(HDC hdc, int x, int y, long lColor); bool drawExtrudedCard(HDC hdc, int x, int y, int dx, int dy, int iCard, int iMode, long lColor);
static eSUIT getSuit(int iCard); // Weiß noch nicht ob ich die brauch.... ist erstmal nur übernommen... static eRANK getRank(int iCard); // " " };
|
Sourcefile
C++: |
#include ".\cardsdll.h"
cdtInit myCdtInit = NULL; cdtDraw myCdtDraw = NULL; cdtDrawExt myCdtDrawExt = NULL; cdtTerm myCdtTerm = NULL; cdtAnimate myCdtAnimate = NULL;
CCardsDLL::CCardsDLL(void) { m_hCardsDll = ::LoadLibrary("cards.dll");
if(m_hCardsDll == NULL) { ::MessageBox(NULL, "Unable to load library.", "Error", MB_OK | MB_ICONERROR); } else { myCdtInit = reinterpret_cast<cdtInit>(::GetProcAddress(m_hCardsDll, "cdtInit")); myCdtDraw = reinterpret_cast<cdtDraw>(::GetProcAddress(m_hCardsDll, "cdtDraw")); myCdtDrawExt = reinterpret_cast<cdtDrawExt>(::GetProcAddress(m_hCardsDll, "cdtDrawExt")); myCdtTerm = reinterpret_cast<cdtTerm>(::GetProcAddress(m_hCardsDll, "cdtTerm")); myCdtAnimate = reinterpret_cast<cdtAnimate>(::GetProcAddress(m_hCardsDll, "cdtAnimate"));
if(myCdtInit == NULL || myCdtDraw == NULL || myCdtDrawExt == NULL || myCdtTerm == NULL || myCdtAnimate == NULL) { m_bIsLoaded = false; ::MessageBox(NULL, "There is an error!", "Error", MB_OK | MB_ICONERROR); ::FreeLibrary(m_hCardsDll); } else { m_bIsLoaded = true; } } }
bool CCardsDLL::Init(void) { if(m_bIsLoaded) { if(!::myCdtInit(71, 95)) { ::MessageBox(NULL, "Fehler beim Initialisieren der Spielkarten!", "Fehler", MB_OK | MB_ICONERROR); return false; } } else { return m_bIsLoaded; } }
CCardsDLL::~CCardsDLL(void) { Destroy(); }
void CCardsDLL::Destroy(void) { ::myCdtTerm(); ::FreeLibrary(m_hCardsDll); }
bool CCardsDLL::drawCard(HDC hdc, int x, int y, int iCard, int iMode, long lColor) { return ::myCdtDraw(hdc, x, y, iCard, iMode, lColor); }
bool CCardsDLL::drawCardBack(HDC hdc, int x, int y, int iCard) { return ::myCdtDraw(hdc, x, y, iCard, CS_FACEDOWN, 0); }
bool CCardsDLL::drawAnimatedBack(HDC hdc, int x, int y, int iCard, int iFrame) { return ::myCdtAnimate(hdc, iCard, x, y, iFrame ); }
bool CCardsDLL::drawInvertedCard(HDC hdc, int x, int y, int iCard) { return ::myCdtDraw(hdc, x, y, iCard, CS_HILITE, 0 ); }
bool CCardsDLL::drawEmptyCard(HDC hdc, int x, int y, long lColor) { return ::myCdtDraw(hdc, x, y, 1, CS_GHOST, lColor); }
bool CCardsDLL::drawExtrudedCard(HDC hdc, int x, int y, int dx, int dy, int iCard, int iMode, long lColor) { return ::myCdtDrawExt(hdc, x, y, dx, dy, iCard, iMode, lColor); }
eSUIT CCardsDLL::getSuit(int iCard) { int iSuit = iCard % 4; return (eSUIT)iSuit; }
eRANK CCardsDLL::getRank(int iCard) { int iRank = iCard / 4; return (eRANK)iRank; }
|
So... das ganze ist noch nicht fertig... aber vllt findet jemand von euch ja auch direkt den Fehler... ich find ihn imo net und hab Kopfschmerzen und keinen Bock mehr Mach morgen odg. weiter...
Mit freundlichen Grüßen Deviloper Devil Entertainment |