Heim >Backend-Entwicklung >Golang >Warum schlägt mein Go-Code fehl, wenn GetVolumeInformation mit unsafe.Pointer verwendet wird?
GetVolumeInformation WinAPI-Funktion in Go aufrufen
Problem:
Beim Versuch, das Volume abzurufen Wenn Sie mithilfe der WinAPI-Funktion „GetVolumeInformation“ einen Namen eingeben, schlägt der Code mit einem unerwarteten Fehler fehl.
Antwort:
Der Fehler ist auf die falsche Verwendung von unsafe.Pointer zurückzuführen. Insbesondere sollte der &-Operator bei der Konvertierung in „unsafe.Pointer“ aus den Variablennamen entfernt werden.
Lösung:
Ändern Sie den Code wie folgt, um die Zeigerprobleme zu beheben:
<code class="go">var nVolumeNameSize = uint32(len(VolumeNameBuffer)) ret, _, callErr := syscall.Syscall9(uintptr(getVolume), nargs, uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(RootPathName))), uintptr(unsafe.Pointer(&VolumeNameBuffer[0])), uintptr(nVolumeNameSize), uintptr(unsafe.Pointer(&VolumeSerialNumber)), uintptr(unsafe.Pointer(&MaximumComponentLength)), uintptr(unsafe.Pointer(&FileSystemFlags)), uintptr(unsafe.Pointer(&FileSystemNameBuffer[0])), uintptr(nFileSystemNameSize), 0)</code>
Dieser überarbeitete Code übergibt die entsprechenden Zeiger korrekt, wodurch der Fehler behoben wird und das Abrufen des Datenträgernamens ermöglicht wird.
Das obige ist der detaillierte Inhalt vonWarum schlägt mein Go-Code fehl, wenn GetVolumeInformation mit unsafe.Pointer verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!