Version einer DLL rausfinden



  • also das sind alles libs, die ich hinzulinke:

    kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib version.lib
    


  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Alles klar, fuer DWORD brauche ich die windows.h, so weit bin ich nun 🙂 Funzt aber immer noch nicht, kommt immer folgendes>

    main.o(.text+0x22):main.c: undefined reference to `GetFileVersionInfoSizeA@8'
    main.o(.text+0xa0):main.c: undefined reference to `GetFileVersionInfoA@16'
    main.o(.text+0xeb):main.c: undefined reference to `VerQueryValueA@16'
    


  • Import library: Version.lib



  • flenders schrieb:

    Import library: Version.lib

    habe noch nie eine Libary importiert, wie genau muesste das aussehen?



  • #pragma comment(lib, "version.lib")
    

    in einer C/CPP-Datei einfügen



  • sowas doofes, ich bekomm den code von PSolid85 einfach nicht lauffaehig, hab ihn auch schon teilweise editiert, klappt allet nit 😞
    Ich habe Visual Studio.NET 2003 und DevCPP zur verfuegung, problem ist, das ich die Version einer DLL Datei auslesen moechte und das ohne .NET ...
    Vielleicht kann mir jemand irgendwie sagen wie ich den code von PSolid85 zum laufen bekomm, ich verzweifel daran...



  • unter dev-cpp funktioniert das #pragma nicht.
    die lib musst du bei den projekt optionen hinzufügen.
    --> parameter
    --> linker
    -lversion

    -l == linken

    ansonsten wäre es hilfreich wenn du das compilerlog hier her kopierst.



  • Also, eigentlich wurde schon alles gesagt, aber hier nochmals zum mitschreiben:

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #pragma comment(lib, "version.lib")
    
    BOOL DisplayFileVersion(LPCTSTR szFileName)
    {
      LPVOID vData = NULL;
      VS_FIXEDFILEINFO *fInfo = NULL;
      DWORD dwHandle;
    
      DWORD dwSize = GetFileVersionInfoSize(szFileName, &dwHandle);
      if (dwSize <= 0)
        return FALSE;
    
      // try to allocate memory
      vData = malloc(dwSize);
      if (vData == NULL)
      {
        SetLastError(ERROR_OUTOFMEMORY);
        return FALSE;
      }
    
      // try to the the version-data
      if (GetFileVersionInfo(szFileName, dwHandle, dwSize, vData) == 0)
      {
        DWORD gle = GetLastError();
        free(vData);
        SetLastError(gle);
        return FALSE;
      }
    
      // try to query the root-version-info
      UINT len;
      if (VerQueryValue(vData, _T("\\"), (LPVOID*) &fInfo, &len) == 0)
      {
        DWORD gle = GetLastError();
        free(vData);
        SetLastError(gle);
        return FALSE;
      }
    
      // build the file-version
      _tprintf(_T("Version: %d.%d.%d.%d\n"), 
        HIWORD(fInfo->dwFileVersionMS),
        LOWORD(fInfo->dwFileVersionMS),
        HIWORD(fInfo->dwFileVersionLS), 
        LOWORD(fInfo->dwFileVersionLS)
      );
    
      free(vData);
      SetLastError(ERROR_SUCCESS);
      return TRUE;
    }
    
    int _tmain()
    {
      DisplayFileVersion(_T("f:\\kernel32-win98se.dll"));
    }
    

    Funktioniert wunderbar unter VS2003...



  • ich danke schonmal!
    wenn ich das jetz per Copy/Paste in ein VisualStudio2003 konsolen programm(win32) einfuege, kommt beim kompilieren folgender fehler:
    c:\Testen\Testen.cpp(61): fatal error C1010: Unerwartetes Dateiende während der Suche nach der Direktive für die vorkompilierte Headerdatei
    Verstehe das aber eigentlich nicht...

    EDIT:
    nachdem ich noch #include "stdafx.h" hinzugefuegt habe, kann ich es kompilieren, allerdings gibt er - egal mit was fuer einer DLL ich es probiere - FALSE wieder, eine Ausgabe von der Funktion kommt leider auch nit 😞

    EDIT2:
    Habe nen bissl rumrpobier und bin zu dem schluss gekommen das er hier:
    if (dwSize <= 0)
    schon anhaelt, was ja bedeutet das GetFileVersionInfoSize nicht richtig ausgefuehrt wird, oder? kA warum ^^

    EDIT3:
    Danke an alle die mir so lieb geholfen haben, ich bin einfach so dumm... geht gar nit... habe vergessen das nen \ alleine ja irgendwie doof ist... weil das ja das terminierungsziehcen von C Dingsda ist... habe nun immer 2stueck gemacht, dann gehts.... oh mann, meine dummheit kotzt mich an!


Anmelden zum Antworten