Mam problem mam kody do odczytywania wersji aplikacji który działa mi pod C++ Bubilderem XE jednak nie działa (chociaż się kompiluje) pod XE2.
LPVOID lpStr1 = NULL, lpStr2 = NULL;
WORD* wTmp;
DWORD dwHandlev = NULL;
UINT dwLength;
char sFileName[1024] = {0};
char sTmp[1024] = {0};
AnsiString sInfo;
LPVOID* pVersionInfo;
if(ModulePath == NULL) GetModuleFileName(NULL, sFileName, 1024);
else strcpy(sFileName, ModulePath);
DWORD dwInfoSize = GetFileVersionInfoSize((char*)(LPSTR)sFileName, &dwHandlev);
if(dwInfoSize) {
pVersionInfo = new LPVOID[dwInfoSize];
if(GetFileVersionInfo((char*)(LPCTSTR)sFileName, dwHandlev, dwInfoSize, pVersionInfo)) {
if(VerQueryValue(pVersionInfo, "\\VarFileInfo\\Translation", &lpStr1, &dwLength)) {
wTmp = (WORD*)lpStr1;
sprintf(sTmp, ("\\StringFileInfo\\%04x%04x\\" + KeyName).c_str(), *wTmp, *(wTmp + 1));
if(VerQueryValue(pVersionInfo, sTmp, &lpStr2, &dwLength)) sInfo = (LPCTSTR)lpStr2;
}
}
delete[] pVersionInfo;
}
return sInfo;
}
Wie ktoś może o co chodzi ??
Tak samo ta linia kodu zawsze zwraca mi 0:
unsigned long size = 0;
size = GetFileVersionInfoSizeW(Application->ExeName.t_str(),&h);
Im nowsze wersje tym gorzej to wszystko działa
EDIT:
GetLasError() zwrca:
"The specified resource type cannot be found in the image file."







Options
