在 MSDN 上,我注意到 VerQueryValue 函数的以下内容:



由于 pBlock 是由调用者分配的,系统如何知道 pBlock 何时被释放?

我正在使用以下代码:

UINT reqSize = ::GetSystemDirectoryW(nullptr, 1);

std::vector<wchar_t> winDirectory (reqSize, 0);

UINT retVal = ::GetSystemDirectoryW(&winDirectory[0], reqSize);

std::wstring filePath(winDirectory.begin(), winDirectory.end()-1);

filePath.append(L"\\kernel32.dll");

DWORD bufSize = ::GetFileVersionInfoSizeW(
    filePath.c_str(),
    nullptr);

std::vector<BYTE> fileInfo (bufSize, 0);

::GetFileVersionInfoW(
    filePath.c_str(),
    0,
    bufSize,
    &fileInfo[0]);

UINT size = 0;

VS_FIXEDFILEINFO * ptr = nullptr;

BOOL error = ::VerQueryValueW(
    &fileInfo[0],
    L"\\",
    reinterpret_cast<LPVOID*>(&ptr),
    &size);

最佳答案

VerQueryValue 返回一个指向您分配的初始内存块内某处的指针(GetFileVersionInfoSize 返回一个块的大小,该块的大小足以包含整个版本资源 + ansi 到 unicode 转换所需的任何空间等)

关于c++ - 了解 VerQueryValue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5687706/

10-12 16:05