(SST) ShlWAPI.pas Version 1.08

Developer Reference
TDllGetVersionProc Type Definition
Procedural type that defines the Microsoft recommendation and de-facto standard for a function that returns the version of a dynamic link library.
Global (i.e. pointer variables can be cast to this type and declared in any unit that uses/includes the unit in which the type was defined/declared).
TYPE TDllGetVersionProc = FUNCTION(dllversioninfop : PDllVersionInfo) : HRESULT;
dllversioninfop [in] Pointer to, or address of a record/structore of type TDllVersionInfo or TDllVersionInfo2. .
Return Values
Returns S_OK (= 0) on success and, typically, a COM-defined error code on failure.
This type is commonly used to type-cast a pointer variable to the entry point of the DllGetVersion function, previously acquired by means of the Windows, API function GetProcAddress, as a DllGetVersion function. Alternatively, it can also be used declare a variable in which to store the function's address directly. In this case, the function can subsequently be called by means of this variable without a type-cast.
Because the DllGetVersion function is an optional function that is not exported by all dlls, its existence and accessibility in both system and third party dlls can/should not be taken for granted and therefore has to be confirmed by means of the Windows, API function GetProcAddress, prior to calling the function itself.
... Procedure CallDllGetVersion1(); Var dllhandle : HMODULE; Var dllverinforec : TDllVersionInfo; Var procaddr : POINTER; Var getverresult : HRESULT; begin dllhandle := 0; procaddr := NIL; FlllChar(dllverinforec, SizeOf(dllverinforec), #0); getverresult := 0; dllhandle := LoadLibrary('MyExampleDll.dll'); if (modulehandle <> 0) and (modulehandle <> INVALID_HANDLE_VALUE) then begin //Note, that the function name is case-sesitive ! procaddr := GetProcAddress(dllhandle, 'DllGetVersion'); if procaddr <> nil then begin dllverinforec.cbSize := SizeOf(dllverinforec); getverresult := TDllGetVersionProc(procaddr))(@dllverinforec); FreeLibrary(dllhandle); end; end; end; ... Procedure CallDllGetVersion2(); Var modulehandle : HMODULE; Var dllgetverfunc : TDllGetVersionProc; Var dllverinfo2rec : TDllVersionInfo2; Var getverresult : HRESULT; begin modulehandle := 0; procaddr := NIL; FlllChar(dllverinfo2rec, SizeOf(dllverinfo2rec), #0); getverresult := 0; //The following line assumes that the dll was already loaded //somewhere else in the program modulehandle := GetModuleHandle('MyExampleDll.dll'); if (modulehandle <> 0) and (modulehandle <> INVALID_HANDLE_VALUE) then begin //Don't forget that the function name is case-sesitive ! dllgetverfunc := GetProcAddress(dllhandle, 'DllGetVersion'); if @dllgetverfunc <> nil then begin dllverinfo2rec.info1.cbSize := SizeOf(dllverinfo2rec); getverresult := dllgetverfunc(@dllverinfo2rec); end; end; end;
Unit Declared in ShlWAPI.pas
Library ShlWAPI.dcu/ShlWAPI.obj
See Also
TDllVersionInfo, TDllVersionInfo2. MakeDllVerULL, DllGetVersion.
Windows APIs: DLLVERSIONINFO, DLLVERSIONINFO2, DllGetVersion, GetProcAddress.

Document/Contents version 1.00
Page/URI last updated on 07.12.2023
Copyright © Stoelzel Software Technologie (SST) 2010 - 2017
Suggestions and comments mail to: