亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在registry.GetValue中使用[]byte作為緩沖區?

如何在registry.GetValue中使用[]byte作為緩沖區?

Go
蝴蝶刀刀 2023-07-31 17:28:54
注冊表包中的文檔GetValue()說:GetValue 檢索與打開密鑰 k 關聯的指定值的類型和數據。它填充緩沖區 buf并返回檢索到的字節數 n。如果 buf 太小而無法容納存儲的值,則會返回 ErrShortBuffer 錯誤以及所需的緩沖區大小 n。如果未提供緩沖區,則返回 true 和實際緩沖區大小 n。如果未提供緩沖區,則 GetValue 僅返回值的類型。如果該值不存在,則返回錯誤ErrNotExist。GetValue 是一個低級函數。如果值的類型已知,請改用適當的 Get*Value 函數?!本臀叶裕也恢雷员眄椀闹殿愋?。但是,我只需要將值打印為字符串。GetValue()接受值名稱和“緩沖區”,但緩沖區的類型為 []byte。它不是通過引用傳遞的,所以我不能只是創建var buf []byte、傳遞它并讀取它。我無法用&buf(type *[]byte)傳遞它。我無法使用byte.Buffer(也類型不匹配)。我覺得我缺少一些非常簡單的東西。代碼:var buf []byte //????_, _, e := myKey.GetValue(valuename, buf)if e != nil {    panic(e)}fmt.Printf("Value: %s\n", string(buf)) // Prints blank
查看完整描述

1 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

我想你提到的注冊表API是Windows注冊表。要使用這些類型的 API,您必須對您期望的調用輸出大小做出最佳猜測:


buf:=make([]byte,1024)

typ, n, e := myKey.GetValue(valuename, buf)

if e==ErrShortBuffer {

   // Go back, try with a larger buffer size

   buf=make([]byte,n)

   typ, n, e = myKey.GetValue(valuename, buf)

}


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號