CのREG_
BINARY値に必要な正確なバッファサイズを決定する具体的な方法はありますか? RegQueryValueEx
可能であれば、方法を示すコードを提供してください。
質問する
634 次
1 に答える
2
Reg
関数以外の多数の win API に適用される winAPI ダブルコール ダンスを実行します。1RegQueryValueEx
回呼び出し、 として NULL を渡し、引数 5 と 6lpData
へのポインタを渡します。関数は返され、必要なバッファ サイズで満たされます。そのサイズのバッファーで再度呼び出します。lpcpData
ERROR_SUCCESS
lpcpData
また、バッファを渡すことから始めることもできます。バッファが小さすぎる場合は、関数が戻り、必要なバッファ サイズERROR_MORE_DATA
で満たされます。lpcpData
2 番目のアプローチを使用する winapi ループの次の一般的な擬似コードを検討してください。
// alloc space for buffer, i.e. buffer is non-NULL
do
{
winret = SomeWinApi(...args..., buffer, &bufferSize, ...more args...);
if (winret != ERROR_SUCCESS)
{
if (winret == ERROR_MORE_DATA)
// alloc more space
else
{
// more error handling
break;
}
}
else bufferIncomplete = FALSE;
} while (bufferIncomplete);
これは、呼び出し間でバッファーのサイズが変わる可能性がある場合、つまり共有バッファーまたは更新中のレジストリ キーの場合も処理します。
于 2012-07-29T18:25:16.140 に答える