Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako pročitati verziju DLL-a

[es] :: C/C++ programiranje :: Kako pročitati verziju DLL-a

[ Pregleda: 2605 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Kako pročitati verziju DLL-a17.09.2003. u 12:41 - pre 250 meseci
Kako saznati verziju DLL-a ili OCX-a iz fajla na disku?
Ne mislim samo na one koje sadrže ActiveX kontrole, već i na obične C DLL-ove.

U attachu je program koji sam skinuo negde sa net-a i malo modifikovao i koji radi, medjutim, informacija koju ispisuje nije ista kao ona koja se dobija iz Windows Explorera na Properties na tabu Version.

Sve je u redu za fajlove koji imaju broj verzije sastavljen od četiri grupe. Problematični su oni sa tri (npr. kontrole napisane u VB-u i neke Microsoftove).

Na primer za neke fajlove program javlja: 5.00.0078 a properties kaže 5.0.0.78. Za druge program kaže 3.0.2123 a properties 3.0.2123.0.

Kako ražrešiti ovo? Kako programski dobiti informaciju koju daje Properties?
Bitno mi je da program radi i za neregistrovane OCX-ove.
Odgovara mi C, C++ ili Python rešenje, pošto u konačnoj verziji ovo treba da mi bude python modul.
Prikačeni fajlovi
 
Odgovor na temu

sspasic
Sasa Spasic

Član broj: 3261
Poruke: 175
*.medianis.net

Jabber: sspasic@elitesecurity.org
ICQ: 35454521


Profil

icon Re: Kako pročitati verziju DLL-a17.09.2003. u 15:15 - pre 250 meseci
Nasao sam resenje.

Code:

struct Var {
    WORD  wLength; 
    WORD  wValueLength; 
    WORD  wType; 
    WCHAR szKey[11]; 
    WORD  Padding[1];
    VS_FIXEDFILEINFO Value;
}; 

...

    DWORD   dwVerHnd=0;

    DWORD dwVerInfoSize = GetFileVersionInfoSize (file_name, &dwVerHnd);
    if (!dwVerInfoSize)     // Cannot reach the DLL file
        return 1;


    LPSTR lpstrVffInfo =
           (LPSTR) new char[dwVerInfoSize];  // Alloc memory for file inf

    if (!GetFileVersionInfo(file_name, dwVerHnd, dwVerInfoSize, lpstrVffInfo)) {
        delete [] lpstrVffInfo;
        return 2;    // Cannot read the file information - 
                        // wierd, since we could read the information size
    }

    Var *var = (Var *)lpstrVffInfo;
    _snprintf(version_string, version_string_size, "%d,%d,%d,%d",
        int(var->Value.dwProductVersionMS >> 16),
        int(var->Value.dwProductVersionMS & 0xFFFF),
        int(var->Value.dwProductVersionLS >> 16),
        int(var->Value.dwProductVersionLS & 0xFFFF));

    delete [] lpstrVffInfo;

 
Odgovor na temu

[es] :: C/C++ programiranje :: Kako pročitati verziju DLL-a

[ Pregleda: 2605 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.