WinAPI

DllGetVersion

  • 2010-10-31 18:27
  • 0 komentarzy
  • 805 odsłon
  • Oceń ten tekst jako pierwszy
// C
HRESULT CALLBACK DllGetVersion(
    DLLVERSIONINFO *pdvi
);

// Delphi
function (var pdvi: TDllVersionInfo): HRESULT; stdcall;

Funkcja DllGetVersion zwraca wersję biblioteki.

Parametry:
pdvi
Wskaźnik do struktury DLLVERSIONINFO (dla starszych niż 5.0 wersji bibliotek) lub DLLVERSIONINFO2 (wersje 5.0 i nowsze, dostarczane razem z systemem Windows 2000 i nowszymi). Pole cbSize tej struktury musi zawierać rozmiar całej struktury (jeśli używasz struktury DLLVERSIONINFO2, pole cbSize musi zawierać jej rozmiar (a nie DLLVERSIONINFO)).

Wartość zwracana
Funkcja zwraca wartość NOERROR gdy się powiedzie; w przeciwnym wypadku zwracany jest błąd OLE.

Uwagi
Funkcja ta powinna być zaimplementowana w każdym pliku dll, jednak może się zdarzyć, że tak nie będzie. Należy się przed tym zabezpieczyć (np. sprawdzić wynik wywołania funkcji GetProcAddress).

Wersja systemu operacyjnego
Windows 98, Windows 2000
Dla wcześniejszych systemów konieczne jest doinstalowanie Internet Explorera w wersji co najmniej 4.0

Przykład:
Funkcja zwraca wersję biblioteki.

// Delphi
function DllGetVersion(const FileName: String): DWORD;
type
  TDllVersionInfo = record
    cbSize:         DWORD;
    dwMajorVersion: DWORD;
    dwMinorVersion: DWORD;
    dwBuildNumber:  DWORD;
    dwPlatformID:   DWORD;
  end;
  TDllVersionInfo2 = record
    info1: TDllVersionInfo;
    dwFlags: DWORD;
    wMajorVersion,
    wMinorVersion,
    wBuildNumber,
    wQualityFixedEnviron: WORD;
  end;
var
  h: THandle;
  p: function (var pdvi: TDllVersionInfo): HRESULT; stdcall;
  v: TDllVersionInfo;
begin
  Result := 0;
  h := SafeLoadLibrary(PChar(FileName));
  if h<>0 then
  try
    p := GetProcAddress(h, 'DllGetVersion');
 
    if Assigned(p) then
    begin
      FillChar(v, SizeOf(TDllVersionInfo), 0);
      v.cbSize := SizeOf(TDllVersionInfo);
      if Succeeded(p(v)) then
        Result := MakeLong(v.dwMinorVersion, v.dwMajorVersion);
    end;
  finally
    FreeLibrary(h);
  end;
end;
// kod pobrany ze strony http://www.moonlight.gr.jp/~el/delphi/lib/LxTrayIcon.pas

Zobacz też: