17 de abril de 2012

Generar un GUID (Globally Unique IDentifier)

Dos funciones que se expusieron el el Foro de la Comunidad VFP en Español. La primera mediante API y la segunda mediante WSH. La función con la API de Windows es 3 veces mas rápida que la que utiliza WSH.

Con API

? GenerateGUID()

FUNCTION GenerateGUID()
  *-- Con la API de Windows
  LOCAL lcRetval, lcStruc_GUID, lcGUID, lnSize
  DECLARE INTEGER CoCreateGuid IN "ole32.dll" STRING @lcGUIDStruc
  DECLARE INTEGER StringFromGUID2 IN "ole32.dll" STRING cGUIDStruc, STRING @cGUID, LONG nSize
  lcStruc_GUID = REPLICATE(" ",16)
  lcGUID = REPLICATE(" ",80)
  lnSize = LEN(lcGUID) / 2
  IF CoCreateGuid(@lcStruc_GUID) <> 0
    RETURN ""
  ENDIF
  IF StringFromGUID2(lcStruc_GUID,@lcGuid,lnSize) = 0
    RETURN ""
  ENDIF
  RETURN STREXTR(STRCONV(lcGUID,6),"{","}") && >= VFP7
  *RETURN SUBSTR(STRCONV(lcGUID,6),2,36) && < VFP7
ENDFUNC

Con WSH

? GenerateGUID()

FUNCTION GenerateGUID
  *-- Con WSH (Windows Script Host)
  LOCAL loObj
  loObj = CREATEOBJECT("Scriptlet.TypeLib")
  RETURN STREXTRACT(loObj.GUID, "{", "}") && >= VFP7
  *RETURN SUBSTR(loObj.GUID,2,36) && < VFP7
ENDFUNC

No hay comentarios. :

Publicar un comentario