1

CのREG_BINARY値に必要な正確なバッファサイズを決定する具体的な方法はありますか? RegQueryValueEx可能であれば、方法を示すコードを提供してください。

4

1 に答える 1

2

Reg関数以外の多数の win API に適用される winAPI ダブルコール ダンスを実行します。1RegQueryValueEx回呼び出し、 として NULL を渡し、引数 5 と 6lpDataへのポインタを渡します。関数は返され、必要なバッファ サイズで満たされます。そのサイズのバッファーで再度呼び出します。lpcpDataERROR_SUCCESSlpcpData

また、バッファを渡すことから始めることもできます。バッファが小さすぎる場合は、関数が戻り、必要なバッファ サイズ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 に答える