В проекте производится запуск внешнего приложения. Необходимо проверить, та ли версия внешней 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;
}
Что не хватает для компиляции?
1)
int main(int argc, char* argv[])
Совершенно непонятная строка. Что она должна делать?
2) MinGW ничего не знает про String. Замените на что-то более переносимое, начиная от простого wchar_t и заканчивая std::string.
3)
String __fastcall TForm1::GetVer(String FileName) {
Это - реализация какой-то сущности, которая у вас отсутствует, и для решения задачи не нужна вообще. Опишите обычную функцию:
static ваш_строковый_тип GetVer(ваш_строковый_тип FileName) {
Сборка персонального компьютера от Artline: умный выбор для современных пользователей