Page 1 sur 1

Variable type variant [Resolu]

Publié : mer. 23/avr./2008 13:32
par Kwai chang caine
Bonjour à tous

J'essai de convertir un code VB en pure.
Certaines variables sont typée VARIANT
Quel est l'équivalent en PURE ?

Merci
Bonne journée

Publié : mer. 23/avr./2008 15:05
par brossden
Bonjour KCC machin truc chose !

Variant, sauf erreur de ma part, c'est une chaine de longueur variable, c'est le cas sous PureBasic donc il suffit de déclarer une chaine toute simple !

Publié : mer. 23/avr./2008 15:13
par Kwai chang caine
Merci mon bon BROSSDEN.
ça faisait longtemps que nous n'avions pas discutaillé ensemble :D

Publié : mer. 23/avr./2008 15:59
par gnozal
Pour simplifier, le variant en VB est une variable qui peut être de n'importe quel type selon les circonstances : chaîne, long, float, etc ...

Le variant est traduit en PB par une structure (voir la dernière version dans le visualisateur de structures) :

Code : Tout sélectionner

Enumeration   ; VARENUM 
  #VT_EMPTY = 0 
  #VT_NULL = 1 
  #VT_I2 = 2 
  #VT_I4 = 3 
  #VT_R4 = 4 
  #VT_R8 = 5 
  #VT_CY = 6 
  #VT_DATE = 7 
  #VT_BSTR = 8 
  #VT_DISPATCH = 9 
  #VT_ERROR = 10 
  #VT_BOOL = 11 
  #VT_VARIANT = 12 
  #VT_UNKNOWN = 13 
  #VT_DECIMAL = 14 
  #VT_I1 = 16 
  #VT_UI1 = 17 
  #VT_UI2 = 18 
  #VT_UI4 = 19 
  #VT_I8 = 20 
  #VT_UI8 = 21 
  #VT_INT = 22 
  #VT_UINT = 23 
  #VT_VOID = 24 
  #VT_HRESULT = 25 
  #VT_PTR = 26 
  #VT_SAFEARRAY = 27 
  #VT_CARRAY = 28 
  #VT_USERDEFINED = 29 
  #VT_LPSTR = 30 
  #VT_LPWSTR = 31 
  #VT_RECORD = 36 
  #VT_INT_PTR = 37 
  #VT_UINT_PTR = 38 
  #VT_FILETIME = 64 
  #VT_BLOB = 65 
  #VT_STREAM = 66 
  #VT_STORAGE = 67 
  #VT_STREAMED_OBJECT = 68 
  #VT_STORED_OBJECT = 69 
  #VT_BLOB_OBJECT = 70 
  #VT_CF = 71 
  #VT_CLSID = 72 
  #VT_VERSIONED_STREAM = 73 
  #VT_BSTR_BLOB = $fff 
  #VT_VECTOR = $1000 
  #VT_ARRAY = $2000 
  #VT_BYREF = $4000 
  #VT_RESERVED = $8000 
  #VT_ILLEGAL = $ffff 
  #VT_ILLEGALMASKED = $fff 
  #VT_TYPEMASK = $fff 
EndEnumeration 

Structure VARIANT 
  vt.w 
  wReserved1.w 
  wReserved2.w 
  wReserved3.w 
  StructureUnion 
    llVal.LARGE_INTEGER 
    lVal.l 
    bVal.b 
    iVal.w 
    fltVal.f 
    dblVal.LARGE_INTEGER 
    boolVal.l 
    bool.l 
    scode.l 
    cyVal.l 
    date.l 
    bstrVal.l 
   *punkVal.IUnknown 
   *pdispVal.IDispatch 
   *parray.l 
   *pbVal.BYTE 
   *piVal.WORD 
   *plVal.LONG 
   *pllVal.LARGE_INTEGER 
   *pfltVal.FLOAT 
   *pdblVal.LARGE_INTEGER 
   *pboolVal.LONG 
   *pbool.LONG 
   *pscode.LONG 
   *pcyVal.LONG 
   *pdate.LONG 
   *pbstrVal.LONG 
   *ppunkVal.LONG 
   *ppdispVal.LONG 
   *pparray.LONG 
   *pvarVal.VARIANT 
    byref.l 
    cVal.b 
    uiVal.w 
    ulVal.l 
    ullVal.LARGE_INTEGER 
    intVal.l 
    uintVal.l 
   *pdecVal.LONG 
   *pcVal.BYTE 
   *puiVal.WORD 
   *pulVal.LONG 
   *pullVal.LARGE_INTEGER 
   *pintVal.LONG 
   *puintVal.LONG                      
    decVal.l 
  EndStructureUnion 
EndStructure
La série #VT_* décrit tous les types possibles.
Ces variants sont beaucoup utilisés avec les inferfaces.

Publié : jeu. 24/avr./2008 8:16
par Kwai chang caine
Ah bah dis donc heureusement que t'as simplifié, sinon j'aurais rien compris :lol:
D'ailleurs j'ai rien compris :lol:
Je t'adore GNOZAL tu sais toujours tout :wink:

Alors en SIMPLE il faut que je declare comment ma variable en debut de mon code pour remplacer le :

Code : Tout sélectionner

Dim Kwai as Variant
Il faut que j'ecrive tout ça ?? :

Code : Tout sélectionner

Enumeration   ; VARENUM 
  #VT_EMPTY = 0 
  #VT_NULL = 1 
  #VT_I2 = 2 
  #VT_I4 = 3 
  #VT_R4 = 4 
  #VT_R8 = 5 
  #VT_CY = 6 
  #VT_DATE = 7 
  #VT_BSTR = 8 
  #VT_DISPATCH = 9 
  #VT_ERROR = 10 
  #VT_BOOL = 11 
  #VT_VARIANT = 12 
  #VT_UNKNOWN = 13 
  #VT_DECIMAL = 14 
  #VT_I1 = 16 
  #VT_UI1 = 17 
  #VT_UI2 = 18 
  #VT_UI4 = 19 
  #VT_I8 = 20 
  #VT_UI8 = 21 
  #VT_INT = 22 
  #VT_UINT = 23 
  #VT_VOID = 24 
  #VT_HRESULT = 25 
  #VT_PTR = 26 
  #VT_SAFEARRAY = 27 
  #VT_CARRAY = 28 
  #VT_USERDEFINED = 29 
  #VT_LPSTR = 30 
  #VT_LPWSTR = 31 
  #VT_RECORD = 36 
  #VT_INT_PTR = 37 
  #VT_UINT_PTR = 38 
  #VT_FILETIME = 64 
  #VT_BLOB = 65 
  #VT_STREAM = 66 
  #VT_STORAGE = 67 
  #VT_STREAMED_OBJECT = 68 
  #VT_STORED_OBJECT = 69 
  #VT_BLOB_OBJECT = 70 
  #VT_CF = 71 
  #VT_CLSID = 72 
  #VT_VERSIONED_STREAM = 73 
  #VT_BSTR_BLOB = $fff 
  #VT_VECTOR = $1000 
  #VT_ARRAY = $2000 
  #VT_BYREF = $4000 
  #VT_RESERVED = $8000 
  #VT_ILLEGAL = $ffff 
  #VT_ILLEGALMASKED = $fff 
  #VT_TYPEMASK = $fff 
EndEnumeration 

Structure VARIANT 
  vt.w 
  wReserved1.w 
  wReserved2.w 
  wReserved3.w 
  StructureUnion 
    llVal.LARGE_INTEGER 
    lVal.l 
    bVal.b 
    iVal.w 
    fltVal.f 
    dblVal.LARGE_INTEGER 
    boolVal.l 
    bool.l 
    scode.l 
    cyVal.l 
    date.l 
    bstrVal.l 
   *punkVal.IUnknown 
   *pdispVal.IDispatch 
   *parray.l 
   *pbVal.BYTE 
   *piVal.WORD 
   *plVal.LONG 
   *pllVal.LARGE_INTEGER 
   *pfltVal.FLOAT 
   *pdblVal.LARGE_INTEGER 
   *pboolVal.LONG 
   *pbool.LONG 
   *pscode.LONG 
   *pcyVal.LONG 
   *pdate.LONG 
   *pbstrVal.LONG 
   *ppunkVal.LONG 
   *ppdispVal.LONG 
   *pparray.LONG 
   *pvarVal.VARIANT 
    byref.l 
    cVal.b 
    uiVal.w 
    ulVal.l 
    ullVal.LARGE_INTEGER 
    intVal.l 
    uintVal.l 
   *pdecVal.LONG 
   *pcVal.BYTE 
   *puiVal.WORD 
   *pulVal.LONG 
   *pullVal.LARGE_INTEGER 
   *pintVal.LONG 
   *puintVal.LONG                      
    decVal.l 
  EndStructureUnion 
EndStructure

Define Kwai.Variant
Merci mille fois de ton aide

Publié : jeu. 24/avr./2008 8:40
par Backup
Kwai chang caine a écrit :Ah bah dis donc heureusement que t'as simplifié, sinon j'aurais rien compris :lol:
D'ailleurs j'ai rien compris :lol:
Je t'adore GNOZAL tu sais toujours tout :wink:

Alors en SIMPLE il faut que je declare comment ma variable en debut de mon code pour remplacer le :

Code : Tout sélectionner

Dim Kwai as Variant
non !!

une variable de type Variant peut recevoir un chiffre,ou de l'ascii

bref, c'est une variable qui n'a pas de type defini

en purebasic
A.f <-- c'est un Flottant
A.b<----- c'est un byte etc ....

en VB une variable de type Variant
peut recevoir soit

Dim A as Variant

A=12
soit
A="coucou"

bref n'importe qu'elle type de donné !!

l'idéal c'est de surveiller ta variable variant, et de voir qu'elle type de donné elle reçoit !!!

si elle ne reçoit que du numérique, et bien considère la comme une variable numérique (Long,Word,Byte) suivant le cas !!

souvent les variable sont déclaré de type Variant par fainéantise des programmeurs , en réalité, elle garde souvent un Type bien défini

c'est due en parti a l'obligation de déclarer une variable en VB , et comme le programmeur, ne sait pas trop a l'avance ce qu'il va faire avec cette variable, il le déclare en variant , de cette façon il est tranquille avec ça....
même si c'est pas une bonne habitude bien sur ... :)

soit dit en passant, j'aimerai bien avoir les variant en purebasic natif :)

Publié : jeu. 24/avr./2008 8:45
par Kwai chang caine
Bonjour DOBRO

Bon d'accord, mais alors à quoi il sert le mega code de GNOZAL, si à la fin je déclare la variable en .l / .w / .b / .s 8O

Publié : jeu. 24/avr./2008 11:05
par gnozal
Kwai chang caine a écrit :Bonjour DOBRO

Bon d'accord, mais alors à quoi il sert le mega code de GNOZAL, si à la fin je déclare la variable en .l / .w / .b / .s 8O
La structure VARIANT est définie dans les dernières versions de PB. Pas besoin du "mégacode", c'était pour décrire la structure.
Quant à l'utilisation, voir les codes ici par exemple (attention, pas simple !) : http://www.purebasic.fr/english/viewtopic.php?t=16968
Comme dit plus haut, çà sert surtout pour utiliser les interfaces.
Pas très utile en programmation courante en PB.

Publié : jeu. 24/avr./2008 13:56
par Kwai chang caine
La structure VARIANT est définie dans les dernières versions de PB
Ah bon d'accord, vous allez me dire que je suis lent à la détente, mais CONCRETEMENT si c'est inclus maintenant, qu'est ce que le met comme lettre derriere ma variable ???
Ou alors ça existe pas en PB et faut faire comme le dit DOBRO et se décider.
C'etait juste pour convertir un code VB en PB que j'etais tombé sur ce type, alors j'aurais aimé savoir si y'avais ou non l'équivalent en PB ?