DLL-Versionsinformationen ermitteln

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

DLL-Versionsinformationen ermitteln

Beitrag von Tom »

Ich will Versionsnummern DLLs ermitteln, die wir mit ausliefern (Laufzeitumgebung, Fremdbibliotheken). Bei eigenen DLLs geht das über LoadResource() recht einfach, bei fremden DLLs nicht ganz so leicht. Ich kenne die nötigen API-Funktionen und habe mich auch schon damit befasst, finde es aber unnötig kompliziert. Hat das schon jemand fertig? :wink:
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DLL-Versionsinformationen ermitteln

Beitrag von AUGE_OHR »

hi,

suchst du so etwas ?

Code: Alles auswählen

Function GetFileVersion(cFile)
LOCAL cFileName := GetShortFileName(cFile)
LOCAL nStartAt  := 0
LOCAL nInfoLen  := DllCall("Version.dll", DLL_STDCALL, ;
                           "GetFileVersionInfoSizeA", cFileName, @nStartAt)
LOCAL cVersion  := Space(nInfoLen)
   if nInfoLen > 0 .and. ;
      DllCall("Version.dll", DLL_STDCALL, "GetFileVersionInfoA", ;
              cFileName, 0, nInfoLen, @cVersion) # 0
      cVersion := upper(cVersion)
      if At("FILEVERSION", cVersion) == 0
         cVersion := StrTran(cVersion, chr(0) + chr(0), '>[@]<')
         cVersion := StrTran(cVersion, chr(0), '')
         cVersion := upper(StrTran(cVersion, '>[@]<', chr(0)))
         if (nStartAt := At("FILEVERSION", cVersion)) > 0
            nStartAt += 13
         endif
      elseif (nStartAt := At("FILEVERSION", cVersion)) > 0
         nStartAt += 12
      endif
      if nStartAt > 0
         nInfoLen := At(chr(0), cVersion, nStartAt)
         cVersion := substr(cVersion, nStartAt, nInfoLen - nStartAt)
      else
         cVersion := ''
      endif
   endif
return (alltrim(cVersion))


Function GetShortFileName(cLongName)
LOCAL cShortName := Space(255)
LOCAL nNameLen   := 1
   if empty(cLongName)
      return ('')
   else
      if Set(_SET_CHARSET) == CHARSET_OEM
         cLongName := ConvToAnsiCp(cLongName)
      endif
      nNameLen := DllCall("Kernel32.DLL", DLL_STDCALL, "GetShortPathNameA",;
                          cLongName, @cShortName, len(cShortName))
   endif
return (left(cShortName, nNameLen))
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: DLL-Versionsinformationen ermitteln

Beitrag von AUGE_OHR »

Nachtrag : Pablo hat eine CLASS TFileVersionInfo die noch mehr Informationen ausgibt
Dateianhänge
VerInfo.zip
benötigt ot4xb
(47.47 KiB) 242-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DLL-Versionsinformationen ermitteln

Beitrag von Tom »

Hallo, Jimmy.

Die Funktion, die Du vorher gepostet hattest, erfüllt ihren Zweck (nach einigen kleineren Anpassungen, die ich auch noch anmerken werde). Danke!
Herzlich,
Tom
Antworten