DLL のバージョンの取得は以下のようにする.
LPDLLVER GetDllVersion(LPCTSTR lpszDllName)
{
BOOL fRET = FALSE;
HINSTANCE hinstDll;
static TCHAR szText[MAX_PATH] = TEXT("Could not load DLL");
static DLLVER dllver;
static DLLVERSIONINFO dvi;
dllver.pdvi = &dvi;
dllver.str = szText;
// Load the DLL.
hinstDll = LoadLibrary(lpszDllName);
if(hinstDll) {
DLLGETVERSIONPROC pDllGetVersion;
pDllGetVersion = (DLLGETVERSIONPROC)GetProcAddress( hinstDll, TEXT("DllGetVersion"));
if(pDllGetVersion) {
HRESULT hr;
ZeroMemory(&dvi, sizeof(dvi));
dvi.cbSize = sizeof(dvi);
hr = (*pDllGetVersion)(&dvi);
if(SUCCEEDED(hr)) {
wsprintf( szText,
TEXT("DLL Version = %d.%02d\nBuild# = %d\r\n"),
dvi.dwMajorVersion,
dvi.dwMinorVersion,
dvi.dwBuildNumber);
switch(dvi.dwPlatformID) {
case DLLVER_PLATFORM_WINDOWS:
dllver.wintype = MY_WIN95;
dllver.success = TRUE;
lstrcat(szText, TEXT("Platform is Windows \r\n"));
break;
case DLLVER_PLATFORM_NT:
dllver.wintype = MY_WINNT;
dllver.success = TRUE;
lstrcat(szText, TEXT("Platform is Windows NT \r\n"));
break;
default:
dllver.wintype=MY_UNKNOWN;
dllver.success = TRUE;
lstrcat(szText, TEXT("Platform is not defined \r\n"));
break;
}
} else {
dllver.success = FALSE;
lstrcpy( szText,
TEXT("DllGetVersion Failed - Cannot determine DLL version.\r\n"));
}
} else {
lstrcpy( szText,
TEXT("GetProcAddress Failed - The DLL does not implement DllGetVersion."));
dllver.success=FALSE;
}
FreeLibrary(hinstDll);
} else {
dllver.success=FALSE;
lstrcpy(szText, TEXT("Could not load the DLL \r\n"));
}
return &dllver;
}
参照
バージョン取得