Header converter et résultats

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Header converter et résultats

Message par Anonyme2 »

Fred,

je ne comprend pas forcément les structure converyties avec Header converter

Un exemple, dans le fichier CommCtrl une fois converti on devrait trouver par exemple la structure LVFINDINFO puisque la Doc MS indique que cette structure est déclarée dans le fichier commctrl.h.

Une fois le fichier CommCtrl.pb créé on trouve ces 2 structures

Code : Tout sélectionner

Structure LVFINDINFOA
  flags.l
 *psz.b
  lParam.l
  pt.POINT
  vkDirection.l
EndStructure

Structure LVFINDINFOW
  flags.l
 *psz.w
  lParam.l
  pt.POINT
  vkDirection.l
EndStructure
Il y a donc une différence en fonction du type de chaine

Mais MS donne cette définition dans la doc SDK

typedef struct tagLVFINDINFO {
UINT flags;
LPCTSTR psz;
LPARAM lParam;
POINT pt;
UINT vkDirection;
} LVFINDINFO, *LPFINDINFO;
et psz est l'adresse d'une chaîne
psz
Address of a null-terminated string to compare with the item text. It is valid only if LVFI_STRING or LVFI_PARTIAL is set in the flags member.


et pas un pointeur sur un byte ou word

Il n'y a pas que cette structure qui est comme ça.

Les conversions sont bonnes ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ca vient peut être du fait que la structure est déclarée comme ça dans le fichier .h:

Code : Tout sélectionner

typedef struct tagLVFINDINFOA
{
    UINT flags;
    LPCSTR psz;
    LPARAM lParam;
    POINT pt;
    UINT vkDirection;
} LVFINDINFOA, *LPFINDINFOA;

typedef struct tagLVFINDINFOW
{
    UINT flags;
    LPCWSTR psz;
    LPARAM lParam;
    POINT pt;
    UINT vkDirection;
} LVFINDINFOW, *LPFINDINFOW;

#ifdef UNICODE
#define  LVFINDINFO            LVFINDINFOW
#else
#define  LVFINDINFO            LVFINDINFOA
#endif
La doc donne, comme définition pour LPCSTR et LPCWSTR:
LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.

LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

T'as raison Chris
LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.

LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters.
est interpreté d'une mauvaise façon

C'est bien un pointeur de chaine mais chaque caractère est codé sur 8 ou 16 bits selon le type de caractère.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Je me souviens d'une remarque que j'avais fait, en disant que dans les structures, Microsoft demandait une chaine, alors que PB demandait l'adresse de la chaine. Fred avait répondu que c'était normal, car PB gérait les strings de manière différente.

Code : Tout sélectionner

;Format PureBasic
Structure MaStructure_PB
  Text.l
EndStructure
Truc_PB.MaStructure_PB

MonTexte.s = "Machin"
Truc_PB\Text = @MonTexte

Debug PeekS(Truc_PB\Text)

;Format Microsoft
Structure MaStructure_MS
  Text.s
EndStructure
Truc_MS.MaStructure_MS

Truc_MS\Text = "Machin"
Debug Truc_MS\Text
Par contre, je n'arrive pas à retrouver le topic
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

;Format PureBasic
Structure MaStructure_PB
Text.l
EndStructure
Truc_PB.MaStructure_PB

MonTexte.s = "Machin"
Truc_PB\Text = @MonTexte
On devrait pas écrire *Text.l
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Il ne s'agit pas de savoir ce qu'on devrait écrire ou pas.

Les structures de Pure sont faites comme ça, et pas autrement.
Exemple tiré du visualiseur de structures de PureBasic:

Code : Tout sélectionner

Structure FINDTEXT
  chrg.CHARRANGE
  lpstrText.l
EndStructure
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

nico a écrit :On devrait pas écrire *Text.l
Je ne comprend pas ce que tu veux dire Nico :roll:

Pour moi *Text.l est parfaitement normal, on a un pointeur qui pointe sur des valeurs en 32 bits (long).
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Justement, tel que Chris l'a écrit, ce n'est pas un pointeur.
il a dû oublié l'étoile.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

nico a écrit :Justement, tel que Chris l'a écrit, ce n'est pas un pointeur.
il a dû oublié l'étoile.
Ha c'était une question :D

Je fatigue un peu :cry:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'avoue que j'étais pas clair :lol:
Dernière modification par nico le sam. 27/nov./2004 19:04, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

J'ai pas oublié l'étoile, il n'y en a pas dans les structures da Pure.

PS, Quand on pose une question, avec un point d'interrogation, ça devient tout de suite beaucoup plus compréhensible :wink:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Chris a écrit :J'ai pas oublié l'étoile, il n'y en a pas dans les structures da Pure.

PS, Quand on pose une question, avec un point d'interrogation, ça devient tout de suite beaucoup plus compréhensible :wink:
C'était un point d'exclamation que j'ai omis!
Répondre