RegQueryValueEx正確使用方法

2021-09-08 18:31:25 字數 1473 閱讀 5689

專案中需要讀取登錄檔中的hkey_classes_root主鍵下乙個子鍵的值,看了看msdn的說明,有regopenkeyexregqueryvalueex兩個函式可以用。也沒仔細閱讀函式說明,就寫了一段簡單的**來測試:

hkey hkey;

wchar szlocation[max_path] = ;

dword dwsize = sizeof(dword);

dword dwtype = reg_sz;

lpctstr studiopath = text("insta360\\studio");

long ret;

ret = regopenkeyex(hkey_classes_root, studiopath, 0, key_read, &hkey);

wprintf(l"regopenkeyex returns %d\n", ret);

if (error_success == ret)

regclosekey(hkey);

}

一執行才發現啥也沒讀出來,而regqueryvalueex()竟然返回的是234(error_more_data),頓時一臉懵逼。

網上一搜才知道,關鍵的關鍵在於這個函式的最後乙個引數。其型別標註為[in][out]。也就是說,這個引數既作為函式的輸入,也作為函式的輸出。函式在讀取登錄檔時會將實際需要的空間大小存在這個引數中。使用者根據這個大小再來分配需要的記憶體空間。所以程式在正式讀取之前,可以呼叫這個函式試探一下大小:

hkey hkey;

wchar szlocation[max_path] = ;

dword dwsize = sizeof(dword);

dword dwtype = reg_sz;

lpctstr studiopath = text("insta360\\studio");

long ret;

ret = regopenkeyex(hkey_classes_root, studiopath, 0, key_read, &hkey);

wprintf(l"regopenkeyex returns %d\n", ret);

if (error_success == ret)

regclosekey(hkey);

}

注意試探的時候,這個函式的倒數第二個引數應該傳遞null。但實際上也可以不試探。而是將最後乙個引數的輸入值設定大一點,這樣就不會返回234錯誤**了。

QWaitCondition 的正確使用方法

喚醒執行緒 class worker public qthread 主線程 worker wt mutex.lock wt.start sleep 1000 qdebug main wait con.wait mutex qdebug main unwait mutex.unlock qdebug ...

QWaitCondition 的正確使用方法

簡單用法 qwaitcondition 用於多執行緒的同步,乙個執行緒呼叫qwaitcondition wait 阻塞等待,直到另乙個執行緒呼叫qwaitcondition wake 喚醒才繼續往下執行。為了描述方便,這裡假設主線程呼叫send 往通訊口傳送乙個資料報,然後阻塞等待回包才繼續往下執行...

Linux中Homebrew的正確使用方法

很多人都在使用linux homebrew 有三個技巧可以幫助你更好的使用它 避免環境汙染 首先要避免將 homebrew 的 bin 目錄新增到 path 而僅僅將你需要使用的幾個可執行做軟連線放到 bin 下面 這個目錄在 path 中 以避免環境汙染。當你編譯或者安裝新軟體時,你顯然希望它依賴...