aboutsummaryrefslogtreecommitdiff
path: root/Src/nu/CCVersion.cpp
blob: 8d0b52c21e646e4b9db1f8207e6b17d00b5beeea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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;
}