Version einer DLL rausfinden
-
hmmm.....das ist blöd.
also ich benutze VisualStudio 6.0 als Entwicklungsumgebung.
Und DWORD ist ein 32-bit unsigned integer.
ich hab dir mal einen auszug der funktionsbeschreibung.
GetFileVersionInfoSize
The GetFileVersionInfoSize function determines whether the operating system can obtain version information about a specified file. If version information is available, GetFileVersionInfoSize returns the size, in bytes, of that information.As with other file installation functions, GetFileVersionInfoSize works only with Win32 file images. It does not work with 16-bit Windows file images.
DWORD GetFileVersionInfoSize(
LPTSTR lptstrFilename, // pointer to filename string
LPDWORD lpdwHandle // pointer to variable to receive zero
);Parameters
lptstrFilename
Pointer to a null-terminated filename string that specifies the file of interest.
Windows 95 and Windows 98: The short path form of the specified file name must be less than 126 characters.lpdwHandle
Pointer to a variable that the function sets to zero.
Return Values
If the function succeeds, the return value is the size, in bytes, of the file's version information.If the function fails, the return value is zero. To get extended error information, callGetLastError.
GetFileVersionInfo
The GetFileVersionInfo function returns version information about a specified file.As with other file installation functions, GetFileVersionInfo works only with Win32 file images. It does not work with 16-bit Windows file images.
BOOL GetFileVersionInfo(
LPTSTR lptstrFilename, // pointer to filename string
DWORD dwHandle, // ignored
DWORD dwLen, // size of buffer
LPVOID lpData // pointer to buffer to receive
// file-version info.
);Parameters
lptstrFilename
Pointer to a null-terminated filename string that specifies the file of interest.
Windows 95 and Windows 98: The short path form of the specified file name must be less than 126 characters.dwHandle
This parameter is ignored.
dwLen
Specifies the size, in bytes, of the buffer pointed to by the lpData member.
Call the GetFileVersionInfoSize function first to determine the size, in bytes, of a file's version information. The dwLen member should be equal to or greater than that value.If the buffer pointed to by lpData is not large enough, the function truncates the file's version information to the size of the buffer.
lpData
Pointer to a buffer to receive file-version information.
You can use this value in a subsequent call to the VerQueryValue function to retrieve data from the buffer.The file version information is always in Unicode format.
Return Values
If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, callGetLastError.
QuickInfo
Windows NT: Requires version 3.1 or later.
Windows: Requires Windows 95 or later.
Windows CE: Unsupported.
Header: Declared in winver.h.
Import Library: Use version.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT.vielleicht hilf dir die QuickInfo weiter.....da steht in welcher lib und welchem header die funktionen stehen.
-
ich leide scheinbar an einem Luxus problem... bekomm es unter DevCPP nicht gebacken... und habe nur Visual Studio .NET zur verfuegung... es darf allerdings unter gar keinen umstaenden mit .NET programiert sein...
Gibts denn noch ne andere Variante? ich erwaege einen Post im WindowsAPI forum, da ich keine ahnung von der WinAPI hab... ich weiss nicht wie ich 1.) Sei anspreche/Einbinde und 2.) wie ich rausbekomme was fuer ne winapi funktion ich brauche .... hab also keinerlei ansatz, googlen hat mich auch nicht weiter gebracht
-
Mit VS2005 kann man auch noch normale Win32- und MFC- und ATL-Anwendungen erzeugen
-
ECHT? WIE!
ich habe Microsoft Visual Studio .NET 2003 ... nciht 2005
EDIT:
Habs raugefunden, einfach ne WIN32 Anwendung erstellen, aber dann haut er mir immernoch ewig viele Fehlermeldungen raus... koenntest du kurz posten was du oben alles einbindest?
-
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 nitEDIT2:
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!