在Go 中調用GetVolumeInformation WinAPI 函數
問題:
嘗試檢索卷使用GetVolumeInformation WinAPI 函數時,程式碼失敗並發生意外錯誤。
答案:
錯誤源自於不正確地使用 unsafe.Pointer。具體來說,轉換為 unsafe.Pointer 時,應將變數名稱中的 & 運算子去掉。
解決方案:
修改程式碼如下,解決指針問題:
<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>
此修改後的程式碼正確地傳遞了適當的指針,消除了故障錯誤並允許檢索磁碟區名稱。
以上是為什麼我的 Go 程式碼在使用 GetVolumeInformation 和 unsafe.Pointer 時失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!