@@ -44,6 +44,15 @@ void CommandLineArgs::PrintUsage() {
4444 std::cout << " -ThreadInterval <milliseconds>: interval time between two thread creations in milliseconds" << std::endl;
4545}
4646
47+ void CheckAPICall (int return_value) {
48+ if (return_value == 0 ) {
49+ auto code = GetLastError ();
50+ std::wstring msg = L" failed to get the version of this file with error code: " ;
51+ msg += std::to_wstring (code);
52+ throw hresult_invalid_argument (msg.c_str ());
53+ }
54+ }
55+
4756CommandLineArgs::CommandLineArgs (const std::vector<std::wstring> &args)
4857{
4958 for (UINT i = 0 ; i < args.size (); i++)
@@ -213,22 +222,26 @@ CommandLineArgs::CommandLineArgs(const std::vector<std::wstring> &args)
213222 else if (_wcsicmp (args[i].c_str (), L" -version" ) == 0 )
214223 {
215224 TCHAR szExeFileName[MAX_PATH];
216- GetModuleFileName (NULL , szExeFileName, MAX_PATH);
225+ auto ret = GetModuleFileName (NULL , szExeFileName, MAX_PATH);
226+ CheckAPICall (ret);
217227 uint32_t versionInfoSize = GetFileVersionInfoSize (szExeFileName, 0 );
218228 wchar_t *pVersionData = new wchar_t [versionInfoSize / sizeof (wchar_t )];
219- GetFileVersionInfo (szExeFileName, 0 , versionInfoSize, pVersionData);
229+ CheckAPICall ( GetFileVersionInfo (szExeFileName, 0 , versionInfoSize, pVersionData) );
220230
221231 wchar_t *pOriginalFilename;
222232 uint32_t originalFilenameSize;
223- VerQueryValue (pVersionData, L" \\ StringFileInfo\\ 040904b0\\ OriginalFilename" , (void **)&pOriginalFilename, &originalFilenameSize);
233+ CheckAPICall (VerQueryValue (pVersionData, L" \\ StringFileInfo\\ 040904b0\\ OriginalFilename" ,
234+ (void **)&pOriginalFilename, &originalFilenameSize));
224235
225236 wchar_t *pProductVersion;
226237 uint32_t productVersionSize;
227- VerQueryValue (pVersionData, L" \\ StringFileInfo\\ 040904b0\\ ProductVersion" , (void **)&pProductVersion, &productVersionSize);
238+ CheckAPICall (VerQueryValue (pVersionData, L" \\ StringFileInfo\\ 040904b0\\ ProductVersion" ,
239+ (void **)&pProductVersion, &productVersionSize));
228240
229241 wchar_t *pFileVersion;
230242 uint32_t fileVersionSize;
231- VerQueryValue (pVersionData, L" \\ StringFileInfo\\ 040904b0\\ FileVersion" , (void **)&pFileVersion, &fileVersionSize);
243+ CheckAPICall (VerQueryValue (pVersionData, L" \\ StringFileInfo\\ 040904b0\\ FileVersion" ,
244+ (void **)&pFileVersion, &fileVersionSize));
232245
233246 std::wcout << pOriginalFilename << std::endl;
234247 std::wcout << L" Version: " << pFileVersion << " ." << pProductVersion << std::endl;
0 commit comments