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>
この改訂されたコードは適切なポインターを正しく渡し、障害エラーを排除し、ボリューム名の取得を可能にします。
以上がGetVolumeInformation を unsafe.Pointer で使用すると Go コードが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。