Problème de typedef

Résolu
Larwin Messages postés 44 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 24 juillet 2010 - 28 janv. 2010 à 11:32
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 29 janv. 2010 à 19:18
bonjour tout le monde.
Nouveau de le monde du c/c++, j'avoue que je galère quelque peu et je me retourne vers la communauté des développeurs pour trouver ce soutient dont j'ai bien besoin.

dans la pratique, voici un exemple qui marche bien :

// définition d'un pointeur de fonction
typedef BOOL (WINAPI *pfuncText)(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString);
...

dans mon code :
HMODULE hGdi = GetModuleHandle(L"gdi32.dll");
pfuncText MyFnText = (pfuncText)GetProcAddress(hGdi, "TextOutW");
...

jusqu'ici tout va bien


j'essaye maintenant de faire la même chose pour la fonction GdipDrawString de la library gdiplus.dll.
je n'arrive pas a faire la définition d'un pointeur vers la fonction.
voici les paramètre de la fonction GdipDrawString

GpStatus WINGDIPAPI
GdipDrawString(
GpGraphics *graphics,
GDIPCONST WCHAR *string,
INT length,
GDIPCONST GpFont *font,
GDIPCONST RectF *layoutRect,
GDIPCONST GpStringFormat *stringFormat,
GDIPCONST GpBrush *brush
);

j'imagine que c'est car la fonction prend en paramètre des pointeurs de classe (si je ne me trompe pas)...
en tout cas un

typedef GpStatus (WINGDIPAPI *pfuncDrawString)(GpGraphics *graphics, GDIPCONST WCHAR *string, INT length, GDIPCONST GpFont *font, GDIPCONST RectF *layoutRect, GDIPCONST GpStringFormat *stringFormat, GDIPCONST GpBrush *brush);

ne fonctionne pas.
Comment puis je écrire ce typedef ?
j'ai bien inséré l'include gdiplus.h, je suis sous vc 2008

Merci de votre aide.

4 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
29 janv. 2010 à 19:08
Salut.
Si c'est un pointeur : brush->getColor() (aussi, moins agréable à lire, mais équivalent : (*brush)->getColor()).


Cordialement, uaip.
3
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
29 janv. 2010 à 00:24
Salut,

GdipDrawString() est une winAPI ? Je ne la trouve pas sur la msdn. Cela dit, ça m'étonne qu'elle prenne des pointeurs de classe en paramètres (mais je ne sais pas).
As-tu essayé d'utiliser cette fonction "simplement", sans typedef ? Pour voir si le problème vient réellement du typedef.
Sinon, désolé, je ne vois pas...



Cordialement, uaip.
0
Larwin Messages postés 44 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 24 juillet 2010
29 janv. 2010 à 10:23
ok autant pour moi...
j'ai omis le "using namespace Gdiplus;"

et la tout fonctionne mieux directement !

je profite de ce thread pour poser une autre petite question assez basique je pense a laquelle je ne trouve pas de réponse.
concernant les pointeurs. je me suis fardé depuis quelques jours des cours et des docs sur le c/c++ mais je ne trouve rien concernant le sujet.

j'ai une fonction, pour l'exemple :
GpStatus WINGDIPAPI detourGdipDrawString(GpGraphics *graphics, GDIPCONST WCHAR *string, INT length, GDIPCONST GpFont *font, GDIPCONST RectF *layoutRect, GDIPCONST GpStringFormat *stringFormat, GDIPCONST GpBrush *brush)

ma variable brush est un pointeur vers une instance de la classe GpBrush ? jusque là j'ai bon ?
comment puis je faire pour appeler les méthodes de la classe GpBrush a travers ce pointeur, genre
brush.getColor() ou *brush.getColor(), enfin je pige plus trop le cumul classes / pointeurs.
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
29 janv. 2010 à 19:18
Oups, la grosse erreur.
(*brush).getColor() et non (*brush)->getColor().
Désolé.


Cordialement, uaip.
0
Rejoignez-nous