Version einer DLL rausfinden
-
Hallo,
Ich habe ein .NET tool welches mit die Versionsnummer von einer belieben DLL ausliest und ausgibt, nun brauche ich allerdings genau so ein tool bloss ohne .NET, das wollte ich in ANSI C realisieren, hat jemand ne idee wie ich diese version auslesen kann? Ich bin da relativ ratlos da mir keine solche funktion gelaeufig ist. Achja, wenn es schon einntool gibt, was das ausliest wuerde es das auch tun
MfG
Atair
-
unsigned char file_version[8]; //test.dll memset(file_version, 0x00, sizeof(file_version)); rc=get_file_version_win("test.dll",file_version); if (rc !=0) { printf("get_file_vers_win failed for test.dll"); } else { printf("test.dll: %s \n", file_version); }
ich hoffe du hast soetwas memeint....aber muss dazu sagen das diese funktion nicht ansi c ist.....aber es gibt ja *.dlls eh nur auf Windowsmaschienen.
-
Mir würde hier nur der Weg über die Windows Funktionen einfallen.
Die Versionsnummer ist ja in den Resourcen der Dateien enthalten.
Schau mal bei www.codeproject.com nach, da müsstest du was passendes finden.
-
danke fuer die schnelle hilfe, habe noch ne frage und moechte dafuer nicht umbedingt nen neuen Thread aufmachen... Also, ich habe probleme mit meinem C Compiler (Ich arbeite mit DEVCPP), egal was ich mache, beim compilieren kommt immer:
"C:\Version\Makefile.win [Build Error] [main.o] Error 1"
Und ich habe keine ahnung woran es liegt, habe jetzt alles auskommentiert und nur das drin stehen:#include <stdio.h> #include <stdlib.h> #include <conio.h> #define ZEILENLAENGE 80 int main() { printf("TEST"); }
Aber es kommt immer dieser fehler
-
hmmm...ich kenne diesen compiler nicht aber was ich am code erkenne fehlt zum einem ein
return
.
und an sonsten kannst du mal schauen ob der Linker richtig eingestellt ist...sprich alle pfade gesetzt.....aber wie schon gesagt kenne den compiler leider nicht
-
Naja, DevCPP benutzt meines wissens GCC
hier nochmal der gesamte outputCompiler: Default compiler Building Makefile: "C:\VersionChecker\Makefile.win" Führt make... aus make.exe -f "C:\VersionChecker\Makefile.win" all gcc.exe -c main.c -o main.o -I"C:/Programme/Dev-Cpp/include" gcc.exe: no input files make.exe: *** [main.o] Error 1 Ausführung beendet
Vermutlich sollte ich das ganze ins DevCPP subforum posten, oder?
-
Vermutlich sollte ich das ganze ins DevCPP subforum posten, oder?
ich denke das wäre die beste idee, denn dort sitzen die cracks dafür.
viel glück
-
PSolid85 schrieb:
unsigned char file_version[8]; //test.dll memset(file_version, 0x00, sizeof(file_version)); rc=get_file_version_win("test.dll",file_version); if (rc !=0) { printf("get_file_vers_win failed for test.dll"); } else { printf("test.dll: %s \n", file_version); }
ich hoffe du hast soetwas memeint....aber muss dazu sagen das diese funktion nicht ansi c ist.....aber es gibt ja *.dlls eh nur auf Windowsmaschienen.
ich habe das nun mal probiert, klappt aber nicht...
#include <stdio.h> #include <stdlib.h> int main() { unsigned char file_version[8]; int rc; //test.dll memset(file_version, 0x00, sizeof(file_version)); rc=get_file_version_win("test.dll",file_version); if (rc !=0) { printf("get_file_vers_win failed for test.dll"); } else { printf("test.dll: %s \n", file_version); } }
muss ich bestimmer .h datein einbinden?
-
sorry ich hab dir nicht alles mitgeschckt....es fehlt natürlich noch die funktion get_file_version_win().....
long get_file_version_win(unsigned char * file_name,unsigned char * file_version) { int file_version_length=0; int buffer_len=0; DWORD dwHandle; LPTSTR lpData; VS_FIXEDFILEINFO *pFileInfo; file_version_length=GetFileVersionInfoSize (file_name, &dwHandle); if (file_version_length == 0) { printf("can not get no valid product-version-length [%d] from file [%s] \n",file_version_length, file_name); return(-1); } lpData = (LPTSTR) malloc (file_version_length); if (!lpData) { printf ("malloc"); return (-1); } if (GetFileVersionInfo (file_name, dwHandle, file_version_length, lpData) == 0) { free (lpData); printf ("VersionInfo not found\n"); return (-1); } if (VerQueryValue (lpData, "\\", (LPVOID) &pFileInfo, (PUINT) &buffer_len) == 0) { printf ("VersionInfo not found\n"); return (-1); } else { sprintf (file_version,"%d.%d.%d%d", HIWORD(pFileInfo->dwFileVersionMS), LOWORD(pFileInfo->dwFileVersionMS),HIWORD(pFileInfo->dwFileVersionLS),LOWORD(pFileInfo->dwFileVersionLS), 1); } free (lpData); return(0); } ////////////////////////////////////////////////////// int dll_version() { unsigned char file_version[8]; //test.dll memset(file_version, 0x00, sizeof(file_version)); rc=get_file_version_win("test.dll",file_version); if (rc !=0) { printf("get_file_vers_win failed for test.dll"); } else { printf("test.dll: %s \n", file_version); } }
ich hoffe das hilft dir jetzt weiter......
-
was genau fuer code is das? bekomme beim compilieren jede menge fehler, was zB ist DWORD? welcher compiler unterstuerzt diesen code?
-
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