Отладка приложений


Таблицы символов, символьные машины и проход стека - часть 8


// Параметр szVer будет содержать строку вида: 5.00.1878.1

BOOL GetlmageHlpVersion ( DWORD & dwMS, DWORD & dwLS)

{

return( GetlnMemoryFileVersion ( _T ( "DBGHELP.DLL"),

dwMS , 

dwLS ) ) ; 

}

BOOL GetDbgHelpVersion ( DWORD & dwMS, DWORD & dwLS)

 {

return( GetlnMemoryFileVersion ( __T ( "DBGHELP.DLL"),

dwMS , 

dwLS ) ) ; 

}

// Возвращает версию DLL-файлов, читающих PDB.

 BOOL GetPDBReaderVersion ( DWORD & dwMS, DWORD & dwLS)

 {

// Первым проверяется файл MSDBI.DLL.

if ( TRUE == GetlnMemoryFileVersion ( _T ( "MSDBI.DLL"),

dwMS ,

 dwLS ) )

 {

return ( TRUE); 

}

else if.( TRUE == GetlnMemoryFileVersion ( _T ( "MSPDB60.DLL"),

dwMS

dwLS ) ) 

{

return ( TRUE); 

}

// Теперь пришла очередь проверить MSPDB50.DLL. 

return ( GetlnMemoryFileVersion ( _T ( "MSPDB50.DLL"),

dwMS

dwLS ) ) ;

 }

// Рабочая функция, используемая двумя предшествующими функциями.

 BOOL GetlnMemoryFileVersion ( LPCTSTR szFile,

DWORD & dwMS , 

DWORD & dwLS ) 

{

HMODULE hlnstlH = GetModuleHandle ( szFile);

// Получить полное имя файла загруженной версии

TCHAR sz!mageHlp[ MAX_PATH ];

GetModuleFileName ( hlnst-IH, szImageHlp, MAX_PATH);

dwMS = 0;

dwLS = 0;

// Получить размер информации о версии.

DWORD dwVerlnfoHandle;

DWORD dwVerSize;

dwVerSize = GetFileVersionlnfoSize ( szImageHlp ,

SdwVerlnfoHandle ); 

if ( 0 == dwVerSize) 

{

return ( FALSE); 

}

// Получили размер информации о версии, теперь получим

 // саму информацию.

LPVOID IpData = (LPVOID)new TCHAR [ dwVerSize ]; 

if ( FALSE == GetFileVersionlnfo ( szImageHlp ,

dwVerlnfoHandle , dwVerSize , IpData )) 

{

delete [] IpData; return ( FALSE);

 }

VS_FIXEDFILEINFO * IpVerlnfo; 

UINT uiLen;

BOOL bRet = VerQueryValue ( IpData ,

_T ( "\\")

  (LPVOID*)SlpVerlnfo, &uiLen ) ;




Начало  Назад  Вперед



Книжный магазин