Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Comment traduire CONST POINT *lpPoints en Asm [ Archives / Newbii ] (frobinet)

lundi 26 mai 2003 à 17:36:38 | Comment traduire CONST POINT *lpPoints en Asm

frobinet

Bonjour,

Je veux utiliser la fonction Polygon de GDI32.DLL
mais je ne sais pas comment redéfinir en assembleur
un type du style :

CONST POINT *lpPoints en provenant du C++

ma structure étant :

PAINT_POLYGON STRUCT
dwPosition DWORD ?
bTypeDessin DWORD ?
dwNombrePoints DWORD ?
lpPoints ??????????????????????????????????
flLargeur DWORD ?
dwCouleurTrait DWORD ?
dwCouleurFond DWORD ?
bTypeTrait DWORD ?
bTypeRemplissage DWORD ?
bSupprime DWORD ?
PAINT_POLYGON ENDS

pour le moment j'ai fais ceci qui fonctionne mais ne me permet pas de mettre le nombre de points que je veux :

PAINT_POLYGON STRUCT
dwPosition DWORD ?
bTypeDessin DWORD ?
lpPoint1 POINT <>
lpPoint2 POINT <>
lpPoint3 POINT <>
lpPoint4 POINT <>
flLargeur DWORD ?
dwCouleurTrait DWORD ?
dwCouleurFond DWORD ?
bTypeTrait DWORD ?
bTypeRemplissage DWORD ?
bSupprime DWORD ?
PAINT_POLYGON ENDS


Merci pour tous renseignements !

lundi 26 mai 2003 à 21:02:49 | Re : Comment traduire CONST POINT *lpPoints en Asm

CoreBreaker

sous TASM c'est struc et pas struct
si en C++ c'est CONST POINT *lpPoints alors c'est:
PAINT_POLYGON STRUC
dwPosition DWORD ?
bTypeDessin DWORD ?
dwNombrePoints DWORD ?
lpPoints DWORD ?
flLargeur DWORD ?
dwCouleurTrait DWORD ?
dwCouleurFond DWORD ?
bTypeTrait DWORD ?
bTypeRemplissage DWORD ?
bSupprime DWORD ?
PAINT_POLYGON ENDS

Et pour la structure POINT:
POINT struc
x DWORD ?
y DWORD ?
POINT ends

Ensuite pour utiliser le champ:
...
poly PAINT_POLYGON <>
index DWORD ?
valeurX DWORD ?
valeurY DWORD ?
...
mov ebx, dword ptr [index]
imul ebx, size POINT ; Calcul de l'offset à partir de l'index
lea esi, [poly].lpPoints ; Calcul de la base du tableau de structures POINT
mov esi, [esi][ebx] ; Accéder à la structure POINT voulue

; Accès aux champs de la structure POINT pointée par ESI
mov eax, [esi].x
mov [valeurX], eax
mov eax, [esi].y
mov [valeurY], eax


Core Breaker

mardi 27 mai 2003 à 10:29:21 | Re : Comment traduire CONST POINT *lpPoints en Asm

frobinet

Bonjour,

Je programme en MASM32 et c'est Struct au lieu de Struc pour
moi.

Mon problème n'est pas de faire référence à une seule
structure POINT mais à dwNombrePoints structures POINT.

En gros je voudrais faire :
lpPoints POINT 100 DUP(?)
mais cette expression ne fonctionne bien sûr pas.

Merci.

-------------------------------
Réponse au message :
-------------------------------

> sous TASM c'est struc et pas struct
> si en C++ c'est CONST POINT *lpPoints alors c'est:
>
PAINT_POLYGON STRUC
> dwPosition DWORD ?
> bTypeDessin DWORD ?
> dwNombrePoints DWORD ?
> lpPoints DWORD ?
> flLargeur DWORD ?
> dwCouleurTrait DWORD ?
> dwCouleurFond DWORD ?
> bTypeTrait DWORD ?
> bTypeRemplissage DWORD ?
> bSupprime DWORD ?
> PAINT_POLYGON ENDS
>

> Et pour la structure POINT:
>
POINT struc
> x DWORD ?
> y DWORD ?
> POINT ends
>

> Ensuite pour utiliser le champ:
>
...
> poly PAINT_POLYGON <>
> index DWORD ?
> valeurX DWORD ?
> valeurY DWORD ?
> ...
> mov ebx, dword ptr [index]
> imul ebx, size POINT ; Calcul de l'offset à partir de l'index
> lea esi, [poly].lpPoints ; Calcul de la base du tableau de structures POINT
> mov esi, [esi][ebx] ; Accéder à la structure POINT voulue
>
> ; Accès aux champs de la structure POINT pointée par ESI
> mov eax, [esi].x
> mov [valeurX], eax
> mov eax, [esi].y
> mov [valeurY], eax
>

>
> Core Breaker
>

mardi 27 mai 2003 à 19:02:59 | Re : Comment traduire CONST POINT *lpPoints en Asm

CoreBreaker

Ah je comprends mieux.
Je ne savais pas que que tu utilisais MASM (désolé)
Je t'ai fourni du code TASM et le dup(?) fonctionne sous TASM vois si tu peux utiliser TASM32 à la place.

sinon sous MASM essaie:
lpPoints POINT 100 DUP(<>)


tu peux aussi faire et ça marche:
PAINT_POLYGON STRUCT
dwPosition DWORD ?
bTypeDessin DWORD ?
dwNombrePoints DWORD ?
lpPoints BYTE (n * SIZE POINT) DUP(?)
flLargeur DWORD ?
dwCouleurTrait DWORD ?
dwCouleurFond DWORD ?
bTypeTrait DWORD ?
bTypeRemplissage DWORD ?
bSupprime DWORD ?
PAINT_POLYGON ENDS


Ou
PAINT_POLYGON STRUCT
dwPosition DWORD ?
bTypeDessin DWORD ?
dwNombrePoints DWORD ?
lpPoints BYTE (n * 8) DUP(?)
flLargeur DWORD ?
dwCouleurTrait DWORD ?
dwCouleurFond DWORD ?
bTypeTrait DWORD ?
bTypeRemplissage DWORD ?
bSupprime DWORD ?
PAINT_POLYGON ENDS


Il faut bien comprendre que tu ne peux pas contruire une structure dans laquelle tu as exactement dwNombrePoints sutructures POINT pour laquelle la valeur dwNombrePoints est changeante car une structure a une taille statique et ne peut donc pas avoir une taille en fonction de la valeur dwNombrePoints qui est dynamique et donc déterminée à l'exécution de ton programme. Sinon il te faut faire une allocation dynamique d'un tableau de dwNombrePoints sutructures POINT et donc la structure que je t'ai donnée est parfaitement adaptée c'est à dire avec:
lpPoints DWORD ?

Ce champ contient donc un pointeur sur la base du tableau dynamique.

Core Breaker


mercredi 28 mai 2003 à 11:05:32 | Re : Comment traduire CONST POINT *lpPoints en Asm

frobinet


Bonjour,

Merci ! je n'avais pas encore compris la subtilité
de DUP !

lpPoints POINT 100 DUP(<>)


Pour le MASM32, je l'ai pris parce que je débute en assembleur 32 et c'est celui-que j'ai trouvé le premier.
Il est facile d'installation et est fournis avec des exemples
de difficultés variables assez interessantes.

Encore Merci !

frobinet.


-------------------------------
Réponse au message :
-------------------------------

> Ah je comprends mieux.
> Je ne savais pas que que tu utilisais MASM (désolé)
> Je t'ai fourni du code TASM et le dup(?) fonctionne sous TASM vois si tu peux utiliser TASM32 à la place.
>
> sinon sous MASM essaie:
>
lpPoints POINT 100 DUP(<>)
>

>
> tu peux aussi faire et ça marche:
>
PAINT_POLYGON STRUCT
> dwPosition DWORD ?
> bTypeDessin DWORD ?
> dwNombrePoints DWORD ?
> lpPoints BYTE (n * SIZE POINT) DUP(?)
> flLargeur DWORD ?
> dwCouleurTrait DWORD ?
> dwCouleurFond DWORD ?
> bTypeTrait DWORD ?
> bTypeRemplissage DWORD ?
> bSupprime DWORD ?
> PAINT_POLYGON ENDS
>

>
> Ou
>
PAINT_POLYGON STRUCT
> dwPosition DWORD ?
> bTypeDessin DWORD ?
> dwNombrePoints DWORD ?
> lpPoints BYTE (n * 8) DUP(?)
> flLargeur DWORD ?
> dwCouleurTrait DWORD ?
> dwCouleurFond DWORD ?
> bTypeTrait DWORD ?
> bTypeRemplissage DWORD ?
> bSupprime DWORD ?
> PAINT_POLYGON ENDS
>

>
> Il faut bien comprendre que tu ne peux pas contruire une structure dans laquelle tu as exactement dwNombrePoints sutructures POINT pour laquelle la valeur dwNombrePoints est changeante car une structure a une taille statique et ne peut donc pas avoir une taille en fonction de la valeur dwNombrePoints qui est dynamique et donc déterminée à l'exécution de ton programme. Sinon il te faut faire une allocation dynamique d'un tableau de dwNombrePoints sutructures POINT et donc la structure que je t'ai donnée est parfaitement adaptée c'est à dire avec:
>
lpPoints DWORD ?
>

> Ce champ contient donc un pointeur sur la base du tableau dynamique.
>
> Core Breaker
>
>



Cette discussion est classé dans : const, polygon, dword, paint, lppoints


Répondre à ce message

Sujets en rapport avec ce message

Mov mem immediat, immediat [ par Erkson ] Bonjour à tous.J'utilise un Pentium II PC, Windows ME, et un debuggeur qui a un assembleur intégré. Lorsque je veux modifier le programme que je debug Comment utiliser AngleArc ? [ par frobinet ] Bonjour,Je n'arrive pas à utiliser la fonction "AngleArc" de gdi32.dllen MASM32. Dans MSDN OnLine il estdit que les deux paramêtres sont des Flottant addition d'entier [ par rhumsek ] bonjourvoici un programme qui doit additionné les nombres d'un tableau, celui doit afficher comme résultat 1500 mais il affiche 1600, pouvez vous m'ai Modif zone de saisie [ par noel70 ] Bonjonr a tous.Je vous explique ce que je voudrais faire.Je voudrais changer les caracteristiques du zones de saisies par l'intermédiaire d'un bouton. BeginPaint code débutant [ par TRAX44 ] Bonjour, le problème est tout simple je comprends absolument pas ce qui marche pas. Le "programme" est censé créer une fenêtre est afficher du texte e LecteurEstDvd asm inline [ par AlexMAN ] Bonjour, Voila j'ai un ptit pb au nivo, je pense, de l'appel de la fonction DeviceIoControl, le code : //Fonction Cint __stdcall LecteurEstDvd(char *p Cycles de mov [ par vecchio56 ] Je me demandais si les instructions suivantes étaient équivalentes en termes de performances, ou si certaines d'entres elles demandaient plus de cycle optimisation [ par sajid_morad ] salut tout le monde , j ai une parti du code en c++, que j ai voulu optimiser , le l ai reécri en asm , mai ça donne pas grand chose, si quelqu un po Bitmapinfoheader [ par noel70 ] Bonjour a tous,Voila, j'ai fais une petite procedure pour affichier dans un control static une image.La procedure pour afficher l'image dans un static REVERSE ENGEEER aide API [ par Fuckly94 ] Salut tout le monde!!je me lance dans le reverse engeneer,c'est à dire la modification de programme déja compilé!!le seul probléme que j'ai,c'est pour


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.