Il codice è il seguente:
void GetVersion(BYTE ver[3])
{
CString C;
C.Format("#%i", VS_VERSION_INFO);
HMODULE h = g_WinApp.m_hInstance;
HRSRC hFileResource = FindResource(h, C, RT_VERSION);
if (!hFileResource) return;
HGLOBAL hMemoryRes = LoadResource (h, hFileResource);
if (!hMemoryRes) return;
LPVOID lpLockedResource = LockResource (hMemoryRes);
if (!lpLockedResource) return;
VS_FIXEDFILEINFO * FileInfo = NULL;
unsigned int nLen = 0;
BOOL BRetVal = NULL;
try{
BRetVal = VerQueryValue(lpLockedResource, "\\", (void **)&FileInfo, &nLen);
}catch(...){}
if (!BRetVal) return;
ver[0] = (BYTE) (FileInfo->dwFileVersionMS >> 16);
ver[1] = (BYTE) (FileInfo->dwFileVersionMS & 0xf);
ver[2] = (BYTE) (FileInfo->dwFileVersionLS >> 16);
return;
}
L'eccezione mi viene sollevata alla seguente riga:
BRetVal = VerQueryValue(lpLockedResource, "\\", (void **)&FileInfo, &nLen);
che attualmente ho messo in un try{}catch che in teoria dovrebbe catturare tutti i tipi di eccezione.