MakeGUID win & lin

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

MakeGUID win & lin

Beitrag von ts-soft »

Da es dies anscheinend noch nicht gibt, hier eine kleine Proc zum GUIDString erzeugen.

Der Linux-Teil basiert auf einem Tipp von freak, hierzu ist dann die uuid-dev
(unter Ubuntu, ansonsten heißt die evtl. leicht anders) zu installieren.

Funktioniert unter Windows und Linux, x86, x64, unicode oder ascii.
Erweiterung für MacOS sollte möglich sein, ich habe aber keinerlei Zugang
zu solchen Geräten.

Code: Alles auswählen

CompilerIf Defined(GUID, #PB_Structure) = #False
Structure GUID
  Data1.l
  Data2.w
  Data3.w
  Data4.b[8]
EndStructure
CompilerEndIf

CompilerIf #PB_Compiler_OS = #PB_OS_Linux
; requires uuid-dev
ImportC "-luuid"
  uuid_generate(*out.GUID)
  uuid_unparse_upper(*uu.GUID, *out)
EndImport
CompilerEndIf

Procedure.s MakeGUID()
  Protected guid.GUID, result.s
  
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      result = Space(36)
      uuid_generate(@guid)
      uuid_unparse_upper(@guid, @result)
      result = "{" + PeekS(@result, -1, #PB_Ascii) + "}"        
    CompilerCase #PB_OS_Windows
      Protected lpsz.s{76}
      If CoCreateGuid_(@guid) = #S_OK
        result = PeekS(@lpsz, StringFromGUID2_(guid, @lpsz, 76), #PB_Unicode)
      EndIf      
    CompilerDefault
    
  CompilerEndSelect
  
  ProcedureReturn result
EndProcedure

Debug MakeGUID()
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild