zuerst habe ich mich gefragt, warum Du das so kompliziert über API
machst, wenn PureBasic doch die Funktion Hostname() besitzt, wie
NicTheQuick schon angemerkt hatte:
Code: Alles auswählen
InitNetwork()
Debug Hostname()
anscheinend fehlerhaft arbeitet und dies auch bereits im englischen
MacOS Bug-Unterforum gemeldet. Daraufhin hat freak dazu angemerkt,
daß der Hostname nicht notwendigerweise dem Computernamen
entspricht. Bei meinen Tests war der Computername bei Windows 7 x86,
x64 und andLinux/Kubuntu 9.04 immer identisch mit der Ausgabe von
Hostname(). Nur auf meinem Mac gab es Unterschiede. Ich habe Dein
Code-Beispiel für meine Tests folgendermaßen umgestellt und für den
Mac erweitert:
Code: Alles auswählen
EnableExplicit
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
ImportC ""
CFRelease(CFTypeRef.L)
CFStringGetCString(CFStringRef.L, *Buffer, BufferSize, Encoding.L)
CSCopyMachineName()
EndImport
CompilerEndIf
Procedure.s GetComputerName()
; ----- Get computer name (API)
Protected HostName.S = Space(255)
Protected Size.I = Len(HostName)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
gethostname_(@HostName, Size)
CompilerCase #PB_OS_MacOS
Protected HostNameRef.L
HostNameRef = CSCopyMachineName()
If HostNameRef
CFStringGetCString(HostNameRef, @HostName, Size, 0)
EndIf
CompilerCase #PB_OS_Windows
GetComputerName_(HostName, @Size)
CompilerEndSelect
ProcedureReturn HostName
EndProcedure
Debug GetComputerName()