mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
|
#include "CCVersion.h"
|
||
|
#include <windows.h>
|
||
|
#include <commctrl.h>
|
||
|
#include <shlwapi.h>
|
||
|
|
||
|
DWORD GetCommCtrlDllVersion(LPCTSTR lpszDllName)
|
||
|
{
|
||
|
DWORD dwVersion = 0;
|
||
|
|
||
|
/* In theory, we should limit the search path to only the system folder
|
||
|
at this point, I don't care */
|
||
|
|
||
|
HINSTANCE hinstDll = LoadLibraryW(lpszDllName);
|
||
|
|
||
|
if(hinstDll)
|
||
|
{
|
||
|
DLLGETVERSIONPROC pDllGetVersion;
|
||
|
pDllGetVersion = (DLLGETVERSIONPROC)GetProcAddress(hinstDll,
|
||
|
"DllGetVersion");
|
||
|
|
||
|
/* Because some DLLs might not implement this function, you
|
||
|
must test for it explicitly. Depending on the particular
|
||
|
DLL, the lack of a DllGetVersion function can be a useful
|
||
|
indicator of the version. */
|
||
|
|
||
|
if(pDllGetVersion)
|
||
|
{
|
||
|
DLLVERSIONINFO dvi;
|
||
|
HRESULT hr;
|
||
|
|
||
|
ZeroMemory(&dvi, sizeof(dvi));
|
||
|
dvi.cbSize = sizeof(dvi);
|
||
|
|
||
|
hr = (*pDllGetVersion)(&dvi);
|
||
|
|
||
|
if(SUCCEEDED(hr))
|
||
|
{
|
||
|
dwVersion = PACKVERSION(dvi.dwMajorVersion, dvi.dwMinorVersion);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
FreeLibrary(hinstDll);
|
||
|
}
|
||
|
return dwVersion;
|
||
|
}
|