Как извлечь версию .exe файла [требует правки]

285
26 марта 2017, 05:56

В проекте производится запуск внешнего приложения. Необходимо проверить, та ли версия внешней prog.exe запускается. Для начала вроде как надо извлечь версию из атрибутов prog.exe, чтобы затем сравнить её с записанным значением.
Нашел вариант кода получения версии файла в C++ Builder и пытаюсь переделать его для IDE Code::Blocks (компилятор MinGW):

#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
String __fastcall TForm1::GetVer(String FileName)
{
String Version;
DWORD h;
DWORD Size = GetFileVersionInfoSize(FileName.c_str(), &h);
if (Size == 0)
{
    Version = L"неизвестно";
    return Version;
}
TCHAR *buf;
buf = (TCHAR *)GlobalAlloc(GMEM_FIXED, Size);
if (GetFileVersionInfo(FileName.c_str(), h, Size, buf) != 0)
{
    PVSFixedFileInfo ValueBuf;
    UINT Len;
    if (VerQueryValue(buf, L"\\", &(void *)ValueBuf, &Len) != 0)
        Version = String().sprintf(L"%d.%d.%d.%d",
        HIWORD(ValueBuf->dwFileVersionMS),
        LOWORD(ValueBuf->dwFileVersionMS),
        HIWORD(ValueBuf->dwFileVersionLS),
        LOWORD(ValueBuf->dwFileVersionLS));
}
GlobalFree(buf);
return Version;
}

Что не хватает для компиляции?

Answer 1

1)

int main(int argc, char* argv[])

Совершенно непонятная строка. Что она должна делать?

2) MinGW ничего не знает про String. Замените на что-то более переносимое, начиная от простого wchar_t и заканчивая std::string.

3)

String __fastcall TForm1::GetVer(String FileName) {

Это - реализация какой-то сущности, которая у вас отсутствует, и для решения задачи не нужна вообще. Опишите обычную функцию:

static ваш_строковый_тип GetVer(ваш_строковый_тип FileName) {
READ ALSO
Удалить из строки все слова не являющиеся идентификаторами. C++

Удалить из строки все слова не являющиеся идентификаторами. C++

Как сравнивать вводимые слова со всеми ключевыми?

359
Коррупция, задача на жадный алгоритм

Коррупция, задача на жадный алгоритм

Помогите мне, пожалуйста, решить эту задачу, а также объяснить, как получается ответ в первом тесте

277
Найти количество инверсий [требует правки]

Найти количество инверсий [требует правки]

Найдите количество инверсий в лексикографически K-ой перестановке чисел от 1 до N

517
Сумма отрезков (массив)

Сумма отрезков (массив)

Дан массив целых чисел a1, a2,, aN−1, aN

247