Esta si es buena...
Como se nota que VB es un lenguaje con "solera", es decir, con años pero con robustez. Pero le pasa como al abuelo Cebolleta, tiene experiencia pero para los nuevos tiempos... ains.. le falta algo.
Hoy en dia no sabriamos hacer nada sin un buen GUID, sobre todo si lo que queremos es identificar de forma unica y constante algun registro, objeto u otro componente.
Usando SQL podemos generar un GUID en un santiamen a traves de la instrucción NEWID(), podemos crear un nuevo GUID en .NET usando la clase GUID.. pero... como lo hacemos con Visual Basic 6?
Para empezar, vamos a ver en que se compone un GUID
¿Que es un GUID?
Su significado es Globally Unique Identifier, osea Identificador globalmente único. Y su misión es la de proporcionar un identificador, de forma que es practicamente imposible que existan dos iguales en el mundo.
Se compone de una palabra de 4 bytes, 3 palabras de 2 bytes y una de 6 bytes.
Originalmente fue una idea de Microsoft para identificar sus objetos OLE, estos se denominan CLSID.
¿Como hacemos esta maravilla de identificador?
Para ello vamos a usar el método coCreateGUID de la libreria OLE32.DLL y crearemos un Type con la configuración de un GUID (ya sabes, 4-2-2-2-6)
Un momento.... hemos dicho 4-2-2-2-6, entonces ¿Por qué hacemos una estructura de 4 (Long), 2 (Integer), 2 (Integer) y Array(7) Byte (osea, 8 Bytes)?
Muy facil, realmente el 3er grupo de 2 bytes es parte del ultimo grupo de 6 Bytes, solo que va separado de este último grupo, es un poco lioso pero en resumidas cuenta, el último grupo lleva los bytes correspondiente al último grupo de 2 Bytes y el grupo de 6 Bytes.
{Data1 - Data2 - Data3 - 2Bytes de Data4 - 6Bytes de Data4}
¿A que ahora queda un poco mas claro?
Luego invocamos a la función coCreateGUID para rellenar este tipo
Como se nota que VB es un lenguaje con "solera", es decir, con años pero con robustez. Pero le pasa como al abuelo Cebolleta, tiene experiencia pero para los nuevos tiempos... ains.. le falta algo.
Hoy en dia no sabriamos hacer nada sin un buen GUID, sobre todo si lo que queremos es identificar de forma unica y constante algun registro, objeto u otro componente.
Usando SQL podemos generar un GUID en un santiamen a traves de la instrucción NEWID(), podemos crear un nuevo GUID en .NET usando la clase GUID.. pero... como lo hacemos con Visual Basic 6?
Para empezar, vamos a ver en que se compone un GUID
¿Que es un GUID?
Su significado es Globally Unique Identifier, osea Identificador globalmente único. Y su misión es la de proporcionar un identificador, de forma que es practicamente imposible que existan dos iguales en el mundo.
Se compone de una palabra de 4 bytes, 3 palabras de 2 bytes y una de 6 bytes.
Originalmente fue una idea de Microsoft para identificar sus objetos OLE, estos se denominan CLSID.
{C802231C-140D-4D91-BEFF-0B9DC2A2877B}
¿Como hacemos esta maravilla de identificador?
Para ello vamos a usar el método coCreateGUID de la libreria OLE32.DLL y crearemos un Type con la configuración de un GUID (ya sabes, 4-2-2-2-6)
Private Type newGUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Un momento.... hemos dicho 4-2-2-2-6, entonces ¿Por qué hacemos una estructura de 4 (Long), 2 (Integer), 2 (Integer) y Array(7) Byte (osea, 8 Bytes)?
Muy facil, realmente el 3er grupo de 2 bytes es parte del ultimo grupo de 6 Bytes, solo que va separado de este último grupo, es un poco lioso pero en resumidas cuenta, el último grupo lleva los bytes correspondiente al último grupo de 2 Bytes y el grupo de 6 Bytes.
{Data1 - Data2 - Data3 - 2Bytes de Data4 - 6Bytes de Data4}
¿A que ahora queda un poco mas claro?
Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As newGUID) As Long
Esta función devuelve 0 si se ha procesado correctamente, y rellenará los valores. Solo tenemos que volver a convertirlos en una cadena String
Dim udtGUID As newGUID
Dim GetGUID As String
If (CoCreateGuid(udtGUID) = 0) Then
GetGUID = _
String(8 - Len(Hex$(udtGUID.Data1)), "0") & Hex$(udtGUID.Data1) & "-" & _
String(4 - Len(Hex$(udtGUID.Data2)), "0") & Hex$(udtGUID.Data2) & "-" & _
String(4 - Len(Hex$(udtGUID.Data3)), "0") & Hex$(udtGUID.Data3) & _
IIf((udtGUID.Data4(0) < &H10), "0", "") & Hex$(udtGUID.Data4(0)) & "-" & _
IIf((udtGUID.Data4(1) < &H10), "0", "") & Hex$(udtGUID.Data4(1)) & _
IIf((udtGUID.Data4(2) < &H10), "0", "") & Hex$(udtGUID.Data4(2)) & _
IIf((udtGUID.Data4(3) < &H10), "0", "") & Hex$(udtGUID.Data4(3)) & _
IIf((udtGUID.Data4(4) < &H10), "0", "") & Hex$(udtGUID.Data4(4)) & _
IIf((udtGUID.Data4(5) < &H10), "0", "") & Hex$(udtGUID.Data4(5)) & _
IIf((udtGUID.Data4(6) < &H10), "0", "") & Hex$(udtGUID.Data4(6)) & _
IIf((udtGUID.Data4(7) < &H10), "0", "") & Hex$(udtGUID.Data4(7))
End If
Esta función la puedes descargar en el siguiente enlace
me gustaria tener este mismo pero que sea para la version de visual studio 2010
ResponderEliminarVisual Studio 2010 tiene su propio generador de GUID integrado. Podrás verlo dentro del menú "Herramientas" (o "Tools" si tienes versión inglesa).
EliminarCrear GUID.
Esta opción te crea un nuevo GUID para tus aplicaciones, pero no es un generador "runtime".
Por favor, podrías especificar que lenguaje estás usando? porque si es C# tienes instrucciones que te lo hacen automáticamente. Como indica en este artículo, Visual Basic 6.5 no tiene como generarlo.