OVH Cloud OVH Cloud

[WD8] Générer un GUID

9 réponses
Avatar
Gilles G.
Bonjour,

je cherche à générer un GUID, mais rien à faire, je n'arrive à obtenir
le même résultat qu'avec le code équivalent en VB...


GUID est une structure
Guid1 est un entier //Type C : DWORD
Guid2 est un entier sur 2 octets //Type C : WORD
Guid3 est un entier sur 2 octets //Type C : WORD
Guid4 est une chaîne fixe sur 8 //Type C : BYTE
FIN

udtGUID est un GUID
sGUID est une chaîne
lResult est un entier



lResult=API("OLE32.DLL","CoCreateGuid",&udtGUID)

SI lResult ALORS
sGUID = ""
SINON
sGUID = Répète("0",38)
API("OLE32.DLL","StringFromGUID2",&udtGUID,&sGUID,39)
FIN

//A partir d'ici, la chaine contient bien un GUID mais incomplet et
//formatté bizarre :
Ex : {<0>3<0>3<0>7<0>1<0>0<0>9<0>0<0>6<0>-<0>7<0>B<0>3<0>6<0>-<0>4<0>E
<0>B<0>B<0>

Ce qui une fois les "<0>" enlevés donne

{33710906-7B36-4EBB

Ce qui ressemble bien au début d'un GUID, mais impossible de le créer...

Quelqu'un a t il une idée ?

9 réponses

Avatar
Romain PETIT
Gilles G. a émis l'idée suivante :
Bonjour,

je cherche à générer un GUID, mais rien à faire, je n'arrive à obtenir
le même résultat qu'avec le code équivalent en VB...



http://minilien.com/?JFLpq9h61u
ou
http://groups.google.fr/groups?hl=fr&lr=&threadmyvRc.7793%24Xc5.189563%40weber.videotron.net&rnum=1&prev=/groups%3Fq%3Dmn.438e7d484daf43c8.2191%40Signature.fin%26hl%3Dfr%26btnG%3DRecherche%2BGoogle


A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Gégé
Gilles G. a écrit :
Quelqu'un a t il une idée ?


C'est pas DonneIdentifiant qui encapsule cette fonction ?
Avatar
Romain PETIT
Gégé avait énoncé :

C'est pas DonneIdentifiant qui encapsule cette fonction ?



Non, regarde le fil que j'ai donné plus haut...

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Gilles G.
In article <cko423$qeb$,
says...
Gilles G. a écrit :
> Quelqu'un a t il une idée ?
C'est pas DonneIdentifiant qui encapsule cette fonction ?



Non, DonneIdentifiant c'est juste un bête entier incrémenté.
Avatar
Guillaume
> > je cherche à générer un GUID, mais rien à faire, je n'arrive à obtenir
> le même résultat qu'avec le code équivalent en VB...

http://minilien.com/?JFLpq9h61u
ou



http://groups.google.fr/groups?hl=fr&lr=&threadmyvRc.7793%24Xc5.189563%40weber.videotron.net&rnum=1&prev=/groups%3Fq%3Dmn.438e7d484daf43c8.2191%40Signature.fin%26hl%3Dfr%26btnG%3DRecherche%2BGoogle
"Romain PETIT"



Alors là, BINGO ! et bravo Romain. Cela fait une éternité que je recherche
ce bout de code. J'ai contourné la difficulté en créant une sp qui demande à
SQL Server de me générer ce bon GuID et de ma le retourner. Mais cela
implique un trafic sur le réseau juste pour avoir un GuID garantie et
correct.
Ton bout de code permet de le faire directement du coté client, et donc de
pouvoir exécuter tous les traitements qu'on veut avec la clé de base et
d'envoyer tous ceux-ci en même temps. Encore bravo. Elle est pas belle la
vie ?
digging !
Avatar
Gégé
Gilles G. a écrit :
Non, DonneIdentifiant c'est juste un bête entier incrémenté.



As-tu résolu ton problème ?
De mémoire, j'avais eu des soucis en 7.0 avec cette API.
Avatar
Gilles G.
In article <ckvs7s$fm7$,
says...
Gilles G. a écrit :
> Non, DonneIdentifiant c'est juste un bête entier incrémenté.

As-tu résolu ton problème ?
De mémoire, j'avais eu des soucis en 7.0 avec cette API.



Non, j'ai abandonné pour l'instant, je génère mes GUID en VB...
Avatar
Gilles G.
In article <cl00km$jdk$,
says...
Gilles G. a écrit :
>>>Quelqu'un a t il une idée ?
POUR i = 0 A 259
AppelDLL32("kernel32", "RtlMoveMemory", &Car, &sGUID+i,1)
SI Asc(Car) <> 0 Ch += Car
FIN



Cool ca marche.

Ta valeur de 260 caractères de chaine est arbitraire ou ça correspond à
quelque chose de précis?

Je ne connaissais pas RTLMoveMemory, c'est pareil qu'un "Transfert" ?
Avatar
Gégé
Gilles G. a écrit :
Ta valeur de 260 caractères de chaine est arbitraire ou ça correspond à
quelque chose de précis?


Je prends large. De toute façon, la chaîne est retaillée après.

Je ne connaissais pas RTLMoveMemory, c'est pareil qu'un "Transfert" ?


Oui