Convertisseur C vers PB : please help !!
Convertisseur C vers PB : please help !!
Pour plus de clarté, j'ouvre une nouvelle rubrique que je souhaiterais réserver strictement aux difficultés que je rencontre, et aux réponses que chacun voudra bien y apporter.
L'évolution globale du programme continuera a être racontée dans
"Convertisseur C vers PB : -> ça commence à marcher" et si vous avez des réflexions à faire sur ce projet, ça serait cool de les faire plutôt dans cette rubrique là.
Problème N°1
Est-ce quelqu'un connait un bon site donnant des explications sur le language C ? Tous les sites que j'ai trouvé s'adressent plutôt à des débutants ou semi-débutants et ne donnent pas trop de détails sur les syntaxes des fonctions. Je cherche quelquechose de vraiment TRES complet pour être sur d'avoir passé en revue TOUTES les syntaxes possibles d'une instructions, y compris TOUTES les subtilités qui peuvent s'y rattacher.
L'évolution globale du programme continuera a être racontée dans
"Convertisseur C vers PB : -> ça commence à marcher" et si vous avez des réflexions à faire sur ce projet, ça serait cool de les faire plutôt dans cette rubrique là.
Problème N°1
Est-ce quelqu'un connait un bon site donnant des explications sur le language C ? Tous les sites que j'ai trouvé s'adressent plutôt à des débutants ou semi-débutants et ne donnent pas trop de détails sur les syntaxes des fonctions. Je cherche quelquechose de vraiment TRES complet pour être sur d'avoir passé en revue TOUTES les syntaxes possibles d'une instructions, y compris TOUTES les subtilités qui peuvent s'y rattacher.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Voici quelques liens si ça peut t'aider :
http://membres.lycos.fr/dancel/c/cours_c.htm
http://www-ipst.u-strasbg.fr/pat/program/tpc.htm
http://membres.lycos.fr/dancel/c/cours_c.htm
http://www-ipst.u-strasbg.fr/pat/program/tpc.htm
Le deuxième est pas mal du tout, merci.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Question N°2 pour les pros du C :
est-ce que :
est bien traduit par le code suivant :

est-ce que :
Code : Tout sélectionner
typedef struct mmtime_tag {
UINT wType;
union {
DWORD ms;
DWORD sample;
DWORD cb;
DWORD ticks;
struct {
BYTE hour;
BYTE min;
BYTE sec;
BYTE frame;
BYTE fps;
BYTE dummy;
BYTE pad[2];
} smpte;
struct {
DWORD songptrpos;
} midi;
} u;
} MMTIME,*PMMTIME,*LPMMTIME;
Code : Tout sélectionner
Structure midi
songptrpos.l
EndStructure
Structure smpte
hour.b
min.b
sec.b
frame.b
fps.b
dummy.b
pad.b[2]
EndStructure
Structure mmtime_tag
wType.w
StructureUnion
ms.l
sample.l
cb.l
ticks.l
smpte.smpte
midi.midi
EndStructureUnion ;
EndStructure
MMTIME.mmtime_tag
*PMMTIME.mmtime_tag
*LPMMTIME.mmtime_tag

Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Question N°3 pour les Pros du C
Dans le code suivant :
KeskeC que ces _STRUCT_NAME(s) et _STRUCT_NAME(s1)
Que signifient les (s) et (s1)
Merci de proposer si possible une traduction de ce code en PureBasic.
Dans le code suivant :
Code : Tout sélectionner
typedef struct tagMIXERCONTROLW {
DWORD cbStruct;
DWORD dwControlID;
DWORD dwControlType;
DWORD fdwControl;
DWORD cMultipleItems;
WCHAR szShortName[MIXER_SHORT_NAME_CHARS];
WCHAR szName[MIXER_LONG_NAME_CHARS];
union {
struct {
LONG lMinimum;
LONG lMaximum;
}_STRUCT_NAME(s);
struct {
DWORD dwMinimum;
DWORD dwMaximum;
}_STRUCT_NAME(s1);
DWORD dwReserved[6];
} Bounds;
union {
DWORD cSteps;
DWORD cbCustomData;
DWORD dwReserved[6];
} Metrics;
} MIXERCONTROLW,*PMIXERCONTROLW,*LPMIXERCONTROLW;


Que signifient les (s) et (s1)

Merci de proposer si possible une traduction de ce code en PureBasic.
Dernière modification par ZapMan le sam. 17/avr./2004 15:54, modifié 1 fois.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Question N°4 pour les Pros du C
Les équivalences suivantes sont-elles correctes ?
Quelle est l'équivalence de LPSTR ?
Les équivalences suivantes sont-elles correctes ?
Code : Tout sélectionner
Procedure.s ConvertCType(c.s)
Select c
Case "DWORD"
c = ".l"
Case "LONG"
c = ".l"
Case "ULONG"
c = ".l"
Case "BOOL"
c = ".l"
Case "FLOAT"
c = ".f"
Case "BYTE"
c = ".b"
Case "CHAR"
c = ".b"
Case "UCHAR"
c = ".b"
Case "WORD"
c = ".w"
Case "UINT"
c = ".w"
Case "INT"
c = ".w"
Case "SHORT"
c = ".w"
Case "WCHAR"
c = ".w"
Case "GUID"
c = ".GUID"
Case "STRING"
c = ".s"
EndSelect
ProcedureReturn c
EndProcedure
Dernière modification par ZapMan le sam. 17/avr./2004 16:09, modifié 1 fois.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Je suis pas un pro du C, vu que j'y connais rien, mais j'aurais plutôt vu ça comme ça:
On va voir combien j'ai de bonnes réponses
Chris
Code : Tout sélectionner
Procedure.s ConvertCType(C.s)
Select C
Case "DWORD" ;<-- Entier non signé 32 bits
C = ".l"
Case "LONG"
C = ".l"
Case "ULONG"
C = ".l"
Case "BOOL" ;<-- renvoie 1 ou 0, donc, byte
C = ".b"
Case "FLOAT"
C = ".f"
Case "BYTE"
C = ".b"
Case "CHAR" ;<-- renvoie un string
C = ".s"
Case "UCHAR" ;<-- certainement un ".s"
C = ".s"
Case "WORD"
C = ".w"
Case "UINT" ;<-- là, je dirais ".l"
C = ".l"
Case "INT" ;<-- idem ici
C = ".l"
Case "SHORT"
C = ".w"
Case "WCHAR" ;<-- ".s", à mon avis : caractère codé sur 8 bits
C = ".s"
Case "GUID" ;<-- PB le prends t'il en charge. Je dirais ".l"
C = ".l"
Case "STRING"
C = ".s"
EndSelect
ProcedureReturn C
EndProcedure

Chris

Je ne sais pas si j'ai tout juste, mais toi, Chris, tu as tout faux. Désolé, il faut vraiment connaitre le C pour répondre à ces questions.
Voici la Question N°5 pour les pros du C :
Que signifie ce "struct wavehdr_tag *lpNext;" au milieu de la structure ?
Merci de proposer si possible une traduction de ce code en PureBasic.
Voici la Question N°5 pour les pros du C :
Code : Tout sélectionner
typedef struct wavehdr_tag {
LPSTR lpData;
DWORD dwBufferLength;
DWORD dwBytesRecorded;
DWORD dwUser;
DWORD dwFlags;
DWORD dwLoops;
struct wavehdr_tag *lpNext;
DWORD reserved;
} WAVEHDR,*PWAVEHDR,*LPWAVEHDR;
Merci de proposer si possible une traduction de ce code en PureBasic.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Ne m'oubliez pas !
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Je fais que passer donc je vais répondre a au moins celle la :ZapMan a écrit :Je ne sais pas si j'ai tout juste, mais toi, Chris, tu as tout faux. Désolé, il faut vraiment connaitre le C pour répondre à ces questions.
Voici la Question N°5 pour les pros du C :Que signifie ce "struct wavehdr_tag *lpNext;" au milieu de la structure ?Code : Tout sélectionner
typedef struct wavehdr_tag { LPSTR lpData; DWORD dwBufferLength; DWORD dwBytesRecorded; DWORD dwUser; DWORD dwFlags; DWORD dwLoops; struct wavehdr_tag *lpNext; DWORD reserved; } WAVEHDR,*PWAVEHDR,*LPWAVEHDR;
Merci de proposer si possible une traduction de ce code en PureBasic.
"struct wavehdr_tag *lpNext;"
Ici on met struct car wavehdr a été définie comme un nouveau type via typedef struct.
*lpNext est un pointeur sur la struct permettant de faire une liste chainée.
"Qui baise trop bouffe un poil." P. Desproges
Merci KarLKox de me donner un peu de ton temps. Il semble que tu sois le seul "Pro du C" disponible en ce moment.
Concernant ta réponse, j'ai trouvé une doc qui me dit à peu près la même chose mais je ne suis pas du tout sûr de la façon dont je devrais traduire cette déclaration en PureBasic.
Crois-tu que tu pourrais me proposer quelquechose ?
Concernant ta réponse, j'ai trouvé une doc qui me dit à peu près la même chose mais je ne suis pas du tout sûr de la façon dont je devrais traduire cette déclaration en PureBasic.
Crois-tu que tu pourrais me proposer quelquechose ?
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Je dirais pas que je suis un Pro du C mais bon, si je peux aider 
Concernant la conversion en PureBasic, sachant qu'on ne peut créer un nouveau type, en tout cas, pas de la même facon qu'en C, je verrais :
Si tu l'utilisateur veut, pour x raison, manipuler la liste (lpNext), il pourra le faire en créant une nouvelle liste via NewList et définir un pointeur sur la structure wavehdr_tag :
Il n'y a plus qu'a utiliser les fonctions de liste de PureBasic pour avancer dans la liste 

Concernant la conversion en PureBasic, sachant qu'on ne peut créer un nouveau type, en tout cas, pas de la même facon qu'en C, je verrais :
Code : Tout sélectionner
Structure wavehdr_tag
lpData.l
dwBufferLength.l
dwBytesRecorded.l
dwUser.l
dwFlags.l
dwLoops.l
lpNext.l
reserved.l
EndStructure
WAVEHDR.wavehdr_tag
*PWAVEHDR.wavehdr_tag
*LPWAVEHDR.wavehdr_tag
Code : Tout sélectionner
MyWave.wavehdr_tag
NewList wavelist.wavehdr_tag()
*ptr.wavehdr_tag
*ptr = AddElement (wavelist()) // ptr pointe sur la liste en cours
MyWave.lpNext = @*ptr

"Qui baise trop bouffe un poil." P. Desproges
Merci, je crois que je vais m'en sortir avec ça.
Si tu as un peu de temps pour les question 2,3 et 4, je suis preneur.
Si tu as un peu de temps pour les question 2,3 et 4, je suis preneur.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Un conseil: utilise les Data pour faire la conversion des types, parce que y'en a un paquet sous Windows. Quelque chose du genre:
Apres tu stockes tout dans un tableau et c'est tranquille. Pas de gros Select/Case et tu peux en rajouter autant que tu veux.
Sinon, pour tes questions:
Tous les LPXXXX sont des 'Long Pointer' vers un type de base. Donc LPSTR c'est un pointer vers un STR donc un string (equivalent à *MaVar.b ou *MaVar.s).
Pour cette question:
non, il ne faut surtout pas creer de variables ! Ce sont des nouveaux types. Tu peux ignorer tous les LPxxx car en PureBasic y'a pas moyen de faire ca directement dans le type (faut specifier le pointer). Sinon, sous Windows, quand t'as un _tag ou tag_ dans le nom de la structure, c'est que c'est pas la bonne
. Dans le cas ci dessus, la 'vrai' structure s'appelle 'MMTIME'. Donc ton code devra ressembler à ca:
Sinon, tes equivalences sont correctes.
Code : Tout sélectionner
Data.s "DWORD", "l"
Data.s "WORD", "w"
Data.s "CHAR", "b"
Sinon, pour tes questions:
Tous les LPXXXX sont des 'Long Pointer' vers un type de base. Donc LPSTR c'est un pointer vers un STR donc un string (equivalent à *MaVar.b ou *MaVar.s).
Pour cette question:
Code : Tout sélectionner
Structure mmtime_tag
wType.w
StructureUnion
ms.l
sample.l
cb.l
ticks.l
smpte.smpte
midi.midi
EndStructureUnion ;
EndStructure
MMTIME.mmtime_tag
*PMMTIME.mmtime_tag
*LPMMTIME.mmtime_tag

Code : Tout sélectionner
Structure MMTIME
wType.w
StructureUnion
ms.l
sample.l
cb.l
ticks.l
smpte.smpte
midi.midi
EndStructureUnion ;
EndStructure
Ce sont des macros, va falloir aller voir dans les .h ce que ca veut dire.KeskeC que ces _STRUCT_NAME(s) et _STRUCT_NAME(s1)
Que signifient les (s) et (s1)
Sinon, tes equivalences sont correctes.
Ca veut dire que c'est un pointer vers la structure wavehdr_tag. Et comme c'est celle en cours de creation, tu peux pas encore utiliser son alias (WAVEHDR). Par contre en PureBasic ca va donner ca:Que signifie ce "struct wavehdr_tag *lpNext;" au milieu de la structure ?
Code : Tout sélectionner
Structure WAVEHDR
*lpData.b;
dwBufferLength.l;
dwBytesRecorded.l;
dwUser.l;
dwFlags.l;
dwLoops.l;
*lpNext.WAVEHDR;
reserved.l;
EndStructure