Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Creazione GUID

Qualcuno sa dirmi come creare dei GUID senza ricorrere ad eseguibili tipo
UUIDGen? So che esistono le api CoCreateGuid e uuidCreate ma di nessuna
delle due è disponibile la dichiarazione api da importare in vb inoltre il
tipo GUID non è definito (o meglio è un membro nascosto di olestd ma non può
essere utilizzato perchè i suoi membri sono dei tipi "variant" non
riconusciuti da vb).
Alla fine a me interessa il GUID in formato stringa e non il numero a 128
bit.
Idee? Codice già pronto?
Non ho ancora guardato sul sc quindi se su lì c'è quello che cerco non
rispondete al messaggio ed eliminatelo dalla vostra testa.
Grazie a tutti, Rick.

 bit.
[Chat mode on]
Pal, prima che lo chiedi, sono a casa di sabato perché
non sto troppo bene :) :(
[Chat mode off]
Queste sono le dichiarazioni:
Public Const S_OK As Long = 0
Public Type GUID
     Data1 As Long
     Data2 As Long
     Data3 As Long
     Data4(8) As Byte
End Type
Private Declare Function CoCreateGuid Lib "ole32.dll" ( _
     pguid As GUID) As Long
Private Declare Function StringFromGUID2 Lib "ole32.dll" ( _
     rguid As Any, _
     ByVal lpstrClsId As Long, _
     ByVal cbMax As Long) As Long
Per la creazione di un GUID puoi procedere in questo modo:
Dim udtGUID As GUID
Dim strGUID As String
Dim bytGUID() As Byte
Dim lngLen As Long
Dim lngRet As Long
'40 byte
lngLen = 40
bytGUID = String(lngLen, 0)
'Crea un nuovo GUID
lngRet = CoCreateGuid(udtGUID)
'lngRet è un HRESULT, wrapper per gli errori generati da UuidCreate()
If  lngRet = S_OK Then
    'Converte in stringa
    lngRet = StringFromGUID2(udtGUID, VarPtr(bytGUID(0)), lngLen)
    If lngRet > 0 then
        strGUID = bytGUID
        'Il valore lngRet include il terminatore
        strGUID = Left$(strGUID, lngRet - 1)
    End if
Else
    'Errore: CoCreateGuid() fallito
End if
La stringa risultante comprende anche le key "{}-"

 [Chat mode off]
<mode pal on>
(gli stupidotti che fanno battute sul nick sono giovani. non uno che giochi
sul secam...)
cavoli, me l'ero perso... c'era jimi.state=chat e mi sono stupidamente
distratto a buttare via uno stupido harddisk defunto... e a risparmiarmi via
napster un duro lavoro di riversamento lp -> mp3...
(a prop di giovanotti, una mi ha anche scritto: les lp's, c'est quoi? -- il
modo piu' rapido per sentirsi giurassici...)
quindi non eri li' perche' sei un vecchietto come me... almeno questo e' un
bene...
mi dispiace, spero ti rimetta presto
<mode pal sunday morning on>

modo piu' rapido per sentirsi giurassici...)
Non ho capito niente della vs discussione, ma non importa.
Pal, ricorda che i francesi bandiscono dal loro vocabolario ogni termine
straniero (c'č persino una legge che vieta l'uso di parole straniere...
pensa che ho un "Topolino" francese č il deposito di Paperone ha come
simbolo la F di franchi... qui si rasenta il ridicolo).
Quindi non stupisce che non capiscano il significato di lp.
Ciao

 Quindi non stupisce che non capiscano il significato di lp.
cavoli e' vero !!
pero' cd lo capiva. compacte disque ? detta cosi', sembra un pack...
ciao, a.

pero' cd lo capiva. compacte disque ? detta cosi', sembra un pack...
un _service_ pack!


Ciaotutti,
Alessandro

 uno vero :)
Un array di byte non è una stringa se contiene solo valori ASCII compliant ?
Evitiamo le conversioni ANSI-Unicode se possibile.

 What's the difference ?
La differenza sarebbe bella grossa in termini di memorio ma mi pere evidente
che non sia possibile dichiararla cosnt perché qualche riga sotto la usi per
farti restiruire la lunghezza della stringa creata. Se fosse stata una const
avresti cmq dovuto usare una variabile e in più avresti dichiarato una
costante.

 costante.
E' un mio modo di procedere (non solo mio, in effetti).
Se la variabile ha un nome non ambiguo e la sua funzione si esaurisce
dopo una chiamata, la riciclo per scopi diversi all'interno di una routine.

 <mode pal sunday morning on>
Sul sun-day ho dei dubbi.


Nessuna conversione amico mio :)
E' questo il bello: lui si aspetta un LPOLESTR, io gli passo una variabile
long che guarda caso e' un puntatore ad una OLE string.
Considera che quando tu assegni l'array alla stringa lui fa solo una
allocazione di spazio e una CopyMemory, non fa una strconv. Puoi verificarlo
in questo modo:
Dim S as string, B() as byte
S="abc"
B=S
MsgBox UBound(B)
Ti aspetteresti 2, invece e' 5.
Per contro, io evito sia l'allocazione sia la copymemory passando
direttamente il parametro stringa.
Ciaotutti,
Alessandro

 in questo modo:
E' proprio quello che vorrei evitare ! Una conversione della stringa
non voluta, determinata dal sistema di notazione in uso in un dato
sistema operativo.
In base alla definizione di LPOLESTR, è più "compatibile" il mio
metodo o il tuo ?
Ciao


Uhm... Tu sai con quali define sia stata compilata la DLL? :)
Ciaotutti,
Alessandro

 dopo una chiamata, la riciclo per scopi diversi all'interno di una
routine.
E' un modo che in effetti io approvo ed io stesso avrei usato. Forse dalle
mie parole non č parso evidente che quello che volevo farti era un plauso e
non una critica.
Ciao, Rick.

 ragionamento, potresti chiariemelo plz? :-?
Spero di essere riuscito a spiegare quello che intendevo dire.
Ciao

 non una critica.
Un "plauso" è esagerato, non sto inventando niente.
Comunque, non avevo scambiato le tue note per critiche, che poi,
per carattere, mi intrigano più che i "plausi" (se hanno senso).
Il fatto è che già Alessandro mi aveva impegnato in una discussione
sullo stesso argomento, così ho risposto un po' in fretta.
Ciao



 ragionamento, potresti chiariemelo plz? :-?
Spero di essere riuscito a spiegare quello che intendevo dire.
Ciao

 Si, ma in fondo ormai che importanza ha ? (grrr.. :)
appunto. che importanza ha ?
il mio massimo era 5-.
allo scientifico...

 Sul sun-day ho dei dubbi.
be', penso che lou reed ereditasse il giorno pagano, non quello
metereologico.


Mmm... Confesso di essermi perso appena dopo aver doppiato le
lstrcpy()/lstrcpyW() :)
In effetti non ho pensato alle versioni di VB, cmq 5 e 6 dovrebbero essere
sicure. La 4 non dovrebbe avere StrPtr e che ricordi non fa nemmeno
l'assegnazione Byte()<->String, quindi mi pare che nn vada cmq :)
Puoi farlo andare con una copymemory, ma allora tanto vale passargli il
puntatore :)
Ciaotutti,
Alessandro

 puntatore :)
Chiaro. L'assegnazione Array <-> String non esiste in versioni
precedenti. Occorre però considerare che questo è un errore che
risulta subito evidente a Design-Time. Mentre un uso scorretto
(scorretto nel senso che non tiene conto delle caratteristiche
dell'ambiente di sviluppo) delle stringhe è un errore "tricky", che è
difficile da tracciare soprattutto per persone che non sanno quello
che ad esempio sai tu sulle stringhe.
Non per niente il Manifesto del NG prevede che venga definita la
versione dell'ambiente di sviluppo come preambolo alla domanda.
L'utilizzo dell'array di byte in questo caso è determinato dalla necessità
di trattare una Ole string e la versione di VB utilizzata non era specificata.


VB4 credo non abbia nemmeno la strconv... Mi sa che in VB4 sta funzione e'
difficilina da implementare.
Ciaotutti,
Alessandro

 wrote [lots of things]
ragazzi, sia chiaro (siate gentili e non dite: "superfluo: gia' lo era") che
io, smileys a parte, non ci capisco una pera cotta in quello che state
dicendo...
:) <--- mio livello di comprensione e partecipazione al thread
...quindi mi auguro vivamente che l'uno e/o l'altro vada archiviando e
magari sintetizzando questo thread.
cosi' il primo tapino che tira fuori "[?] guid" verra' subito sommerso...


Sommerso da cosa? Non ho afferrato...
Il discorso GUID in realta' e' un ottimo spunto di partenza per trattare i
problemi di interfacciamento tra VB e C (si e' notato eh? :)), dato che
tutto passa attraverso il campo minato del codice macchina...
Poi in effetti la discussione ha un po' de-ragliato (per la serie: asino sui
binari, IH-OH, IH-OH :P)... Vabe, peccato, vorra' dire che aspettero' la
prossima occasione di OTizzare ICLVB in ICLASM :))
Jimi, se hai notizie su quelle stringhe mandamele per e-mail plz :)
Ciaotutti,
Alessandro

 allo scientifico...
Ma probabilmente avevi 11+ in latino :)

 Ma probabilmente avevi 11+ in latino :)
naaa, 7-8, ho smesso di studiare appena uscito dalla 3. media, andavo sempre
a usta. tipico caso di "se solo si impegnasse..."
l'esperienza: "cazzo, se solo mi fossi impegnato..." :))

 difficilina da implementare.
L'utilizzo di StrConv() o funzione simile in questo caso non ha scopo.
Posso utilizzare direttamente l'array per l'output del codice generato.
Testare per credere. (Beh, si vede anche a occhio :).
Ciao

 cosi' il primo tapino che tira fuori "[?] guid" verra' subito sommerso...
Forse di più se la domanda sarà "[?] stringhe e puntatori".

 Ti ricordo che VB4 non parla Unicode e nemmeno win 95, volendo guardare :)
Appunto. Viva gli array :)

 Forse di più se la domanda sarà "[?] stringhe e puntatori".
vedi che ero realistico ?


Ciao,
Alessandro


Si ma poi devi convertirlo in ANSI se vuoi scriverlo da qualche parte :)
Ciao,
Alessandro

 Si ma poi devi convertirlo in ANSI se vuoi scriverlo da qualche parte :)
Stringa = array(), dove è possibile. Dove non è possibile ci si arrangia.
Sempre meglio che trovarsi una stringa di ciarpame.


Ciaotutti,
Alessandro

 #ifdef eccetera).
Non capisco questa tua nota. Il fatto importante era la distinzione
tra il master RPC e il master Win32. Dal quale deriva l'importanza
della "compatibilità di progetto".
Se una funzione istanzia una funzione Win32, utilizzerà
ERROR_SUCCESS per valutare il successo di un'operazione.
Se istanzia una funzione Rpc32, utilizzerà RPC_S_OK.
L'errore sarebbe utilizzare ERROR_SUCCESS in entrambi i casi.
Se programmassi per Alpha, mi troverei malino.
Ciao

 Se programmassi per Alpha, mi troverei malino.
L'ho detto, io la portabilita' me la gioco nel momento stesso in cui provo a
chiamare una funzione che non ho creato io, perche' vado a parlare dritto al
processore (per quanto mi e' concesso). In questo modo sono sicuro che, sul
processore per cui il programma e' stato scritto, il codice funziona.
Se dovessi cercare di essere portabile verso piu' processori userei degli
array di byte, ancora piu' grezzi, con delle definizioni condizionali per
capire da che parte li devo leggere (se dalla parte rotonda o da quella a
punta).
In questo caso userei dei wrapper per non far notare al mio progetto VB che
sta venendo scritto per due processori diversi, ma cmq e sempre manterrei
una compatibilita' binaria.
Ciaotutti,
Alessandro

 Chiaro come la notte no? :)
<CHAT interest="very_high" please="non_lasciateci_a_piedi">
Ragazzi, gia' l' argomento e' ostico per dei peones come il sottoscritto,
quindi pregasi tradurre !
Cmq, mi avete insegnato piu' cose voi due in questo thread che fior di
consulenti strapagati! Non abbandonateci.
</CHAT>
(...)
Ciao
Aldo

 </CHAT>
</chat> lo dici poi tu ! :)
se per te e' ostico, per me si dovrebbe coniare un vocabolo apposta...
be', tanto l'uno e/o l'altro hanno promesso implicitamente che faranno del
thread un bel sunto ordinato da pubblicare sul s.c. -- com'era il titolo,
jimi ?
vero ragazzi ?
:) <---- fontsize=64

 wrote in message
news:8vhfog$4heqm$1...@ID-51318.news.dfncis.de...


 cmq mi ero fwdato a casa e che quindi dovrei avere) sono andati persi.
oohhhh !! gaudio !! finalmente posso dirlo anche a te:
prova su 
www.deja.com
( devi cercare in "usenet" :)))))
no, temo di non averli salvati.
gia' fatico a tenere in ordine quello che capisco...
se mi al largo annego :)

 se mi al largo annego :)
al largo anneghi? mmm... resta sottocosta allora, ci teniamo ad averti qui
il piu' a lungo possibile :)
Ciaotutti,
Alessandro

 Tu naturalmente hai una copia di tutti i messaggi vero pal? :-)=
[...]
Se vuoi posso spedirteli io.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 wrote in message
news:8vjpn3$4j2j1$1...@ID-52090.news.dfncis.de...


 tutto: i primi li ho persi per intempestivita' :)
che problema c'e' ?
basta che ricominciate... :))
maurizio, vuoi dire che se il ng indice un concorso per funz. archivista
principale mi fai le scarpe ?
ai nemici ci penso io...

 processore per cui il programma e' stato scritto, il codice funziona.
A parlare "dritto al processore" non mi pare che sia tu, no ?
Ma non è, per caso, che hai qualche complesso d'inferiorità
nei confronti dei programmatori C/C++ e ASMisti ?
E' vero, con VB al massimo puoi spostare un blocchetto di memoria
da qui a lì. Che importanza ha ? Non è questo che rende felici.
Sei un VBista. Non vergognartene :)
PS.
Il post è lunghetto. Se ho saltato qualche pezzo, abbi pazienza,
ho avuto un po' di impegni.

 consulenti strapagati! Non abbandonateci.
Grazie.
In effetti pensavo non interessasse questa discussione,
visto che nessun altro si era aggregato (a parte Pal, che
c'è sempre). Meglio così.

 ho avuto un po' di impegni.
Se hai saltato qualche pezzo non me ne sono accorto :)
Ciaotutti,
Alessandro

 vedere la vita, che e' piu' vicino all'ASM che a VB.
? Cosa vuol dire "non hanno una rete sotto" ?
Che relazione vedi tra OLE e "una rete" ?

 ai nemici ci penso io...
... e gli amici si riconoscono dai bisogni...


 Che relazione vedi tra OLE e "una rete" ?
Una rete di sicurezza, dati la compatibilita' binaria obbligatoria e il
fatto che ogni componente contiene il proprio descrittore.
In effetti il programma potrebbe anche controllare a runtime se il tipo che
sta passando e' quello che la funzione si aspetta, ma data la compatibilita'
binaria obbligatoria non e' necessario.
Pero' sei sicuro che gli include sono sempre aggiornati, includi in VB con
la stessa facilita' con cui lo fai in C e forse anche di +...
E in effetti la cosa migliore sarebbe delegare il compito di wrapper a
specifici moduli di classe OLE/COM in modo che eventualmente se ti cambiano
il tappeto sotto i piedi cmq resti dritto (perche' le tue applicazioni
contano sempre sulla medesima interfaccia definita in modo chiaro e pulito,
e se devi fare cose nuove puoi definire in modo altrettanto chiaro e pulito
la nuova interfaccia).
Ciaotutti,
Alessandro

 fatto che ogni componente contiene il proprio descrittore.
Una "rete di sicurezza" ?
Ciao
(VB.Net sucks !)

 (VB.Net sucks !)
sintetica recensione, l'hai letta su vbpj o stai per scrivercela ?
buona, a.

 sintetica recensione, l'hai letta su vbpj o stai per scrivercela ?
No, tutta farina del mio sacco, che ti credi ?
Al momento è più un condensato di umori che di nozioni,
ma rende l'idea dello sconforto.
Al momento il Convertion Wizard non funziona a dovere.
I progetti VB6 non sono portabili sotto VB.Net, se non dopo
traumaticissime modifiche.
Vedremo la candidate release... Per ora è un macello.

 Vedremo la candidate release... Per ora è un macello.
Per ora, prendiamola in ridere.
Coraggio, il meglio e' passato ...
Eravamo sull' orlo dell' abisso, ma abbiamo fatto un passo avanti ...
Ciao
Aldo

 Per ora, prendiamola in ridere.
