CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Pobranie wersja aplikacji - problem z funkcją

Pobranie wersja aplikacji - problem z funkcją

dział ogólny

Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Corvis » czwartek, 28 kwietnia 2011, 10:51

Witam,

Mam napisaną funkcję która pobiera mi info o exe-cu.

KOD cpp:     UKRYJ  
AnsiString TFileVersion::myGetFileVersionInfo(char *ModulePath, AnsiString KeyName) {
    LPVOID lpStr1 = NULL, lpStr2 = NULL;
    WORD* wTmp;
    DWORD dwHandlev = NULL;
    UINT dwLength;
    char sFileName[1024] = {0};
    char sTmp[1024] = {0};
    AnsiString sInfo;
    LPVOID* pVersionInfo;

    if(ModulePath == NULL) GetModuleFileName(NULL, sFileName, 1024);
    else strcpy(sFileName, ModulePath);

    DWORD dwInfoSize = GetFileVersionInfoSize((char*)(LPSTR)sFileName, &dwHandlev);

    if(dwInfoSize) {
        pVersionInfo = new LPVOID[dwInfoSize];
        if(GetFileVersionInfo((char*)(LPCTSTR)sFileName, dwHandlev, dwInfoSize, pVersionInfo)) {
            if(VerQueryValue(pVersionInfo, "\\VarFileInfo\\Translation", &lpStr1, &dwLength)) {
                wTmp = (WORD*)lpStr1;
                sprintf(sTmp, ("\\StringFileInfo\\%04x%04x\\" + KeyName).c_str(), *wTmp, *(wTmp + 1));
                if(VerQueryValue(pVersionInfo, sTmp, &lpStr2, &dwLength)) sInfo = (LPCTSTR)lpStr2;
            }
        }
        delete[] pVersionInfo;
    }
    return sInfo;
}


Działa fajnie pod Builderem 2010 ale w XE już mi nie działa i wali błędami:



[BCC32 Error] TFileVersion.cpp(51): E2034 Cannot convert 'char[1024]' to 'wchar_t *'
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(51): E2342 Type mismatch in parameter 'lpFilename' (wanted 'wchar_t *', got 'char *')
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(54): E2034 Cannot convert 'char[1024]' to 'const wchar_t *'
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(54): E2342 Type mismatch in parameter 'lptstrFilename' (wanted 'const wchar_t *', got 'char *')
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(58): E2034 Cannot convert 'char[1024]' to 'const wchar_t *'
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(58): E2342 Type mismatch in parameter 'lptstrFilename' (wanted 'const wchar_t *', got 'char *')
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(59): E2034 Cannot convert 'char const[25]' to 'const wchar_t *'
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(59): E2342 Type mismatch in parameter 'lpSubBlock' (wanted 'const wchar_t *', got 'const char *')
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(62): E2034 Cannot convert 'char[1024]' to 'const wchar_t *'
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)
[BCC32 Error] TFileVersion.cpp(62): E2342 Type mismatch in parameter 'lpSubBlock' (wanted 'const wchar_t *', got 'char *')
Full parser context
TFileVersion.cpp(41): parsing: AnsiString TFileVersion::myGetFileVersionInfo(char *,AnsiString)




Może mi ktoś wytłumaczyć o co chodzi w tym Stringach tutaj bo zgłupiałem. Nie chce tego na pałę przeprawiać oby działało. Chce wiedzieć o co tu chodzi.
Ostatnio edytowano czwartek, 28 kwietnia 2011, 11:33 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Do oznaczania błędów używamy tagów [error]błędy[/error]
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Cyfrowy Baron » czwartek, 28 kwietnia 2011, 11:31

Corvis, coraz bardziej mnie zaskakujesz. Przecież masz tam problem ze zmiennymi. Przekazujesz char tam gdzie funkcja oczekuje typu wchar_t. Popraw to tak, by funkcji były przekazywane właściwe typy zmiennych.
Na wchar_t to ja bym to zrobił tak:

KOD cpp:     UKRYJ  
String GetFileVersionInfo(char *ModulePath, String KeyName)
{
 LPVOID lpStr1 = NULL, lpStr2 = NULL;
 WORD* wTmp;
 DWORD dwHandlev = NULL;
 UINT dwLength;
 wchar_t sFileName[1024] = {0};
 wchar_t sTmp[1024] = {0};
 UnicodeString sInfo;
 LPVOID* pVersionInfo;

 if(ModulePath == NULL) GetModuleFileName( NULL, sFileName, 1024);
 else wcscpy(sFileName, (LPTSTR)ModulePath);

 DWORD dwInfoSize = GetFileVersionInfoSize(sFileName, &dwHandlev);

 if(dwInfoSize)
 {
  pVersionInfo = new LPVOID[dwInfoSize];
  if(GetFileVersionInfo(sFileName, dwHandlev, dwInfoSize, pVersionInfo))
  {
   if(VerQueryValue(pVersionInfo, L"\\VarFileInfo\\Translation", &lpStr1, &dwLength))
   {
        wTmp = (WORD*)lpStr1;
        swprintf(sTmp, ("\\StringFileInfo\\%04x%04x\\" + KeyName).w_str(), *wTmp, *(wTmp + 1));
        if(VerQueryValue(pVersionInfo, sTmp, &lpStr2, &dwLength)) sInfo = (LPCTSTR)lpStr2;
   }
  }
  delete[] pVersionInfo;
 }
 return sInfo;
}


Przy czym mapowanie mam ustawione na wchar_t, a nie char:
► mapowanie 
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Cyfrowy Baron » czwartek, 28 kwietnia 2011, 11:37

Jeszcze jeden kod z tej grupy. Wyświetlanie informacji o programie z którego kod został uruchomiony:

KOD cpp:     UKRYJ  
typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
typedef void (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
void TaboutForm::appInfo(void)
{
 std::auto_ptr<TStrings> aList (new TStringList());
 aList->Add("<font size=\"22\" color=\"clRed\"><b>"
            + GetFileVersionInfo(NULL,  "ProductName")
            + "</b></font><br>wersja "
            + GetFileVersionInfo(NULL,  "FileVersion") + "<br><br>");
 aList->Add(GetFileVersionInfo(NULL,  "LegalCopyright") + "<br><br>");
// aList->Add(GetFileVersionInfo(NULL,  "FileDescription") + "<br>");
 aList->Add(GetFileVersionInfo(NULL,  "Comments") + "<br><br><br><br>");

 aboutLabel->Caption = aList->Text;
 Label2->Caption = "Użytkownik: " + (String)getenv("USERNAME");

 OSVERSIONINFOEX info = {0};
 bool bOsVersionInfoEx;
 SYSTEM_INFO si;
 PGNSI pGNSI;
 PGPI pGPI;
 DWORD dwType;

 info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
 bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *)&info);
 if(!bOsVersionInfoEx)
 {
  info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  if(!GetVersionEx((OSVERSIONINFO *) &info)) return;
 }

 pGNSI = (PGNSI)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
                                                      "GetNativeSystemInfo");
 if(NULL != pGNSI) pGNSI(&si);
 else GetSystemInfo(&si);

 String sysInfo = "";

 if(info.dwPlatformId == VER_PLATFORM_WIN32_NT) // wykrywanie systemu
 {
  switch(info.dwMajorVersion + info.dwMinorVersion)
  {
   case 7://if(info.dwMajorVersion == 5 && info.dwMinorVersion == 2)
   {
    if(info.dwMajorVersion == 6 && info.dwMinorVersion == 1)
    {
     sysInfo = "Microsoft Windows 7 ";
    }
    else
    {
      if(GetSystemMetrics(SM_SERVERR2))
       sysInfo = "Microsoft Windows Server 2003 \"R2\" ";
      else
      {
       if(info.wProductType == VER_NT_WORKSTATION &&
           si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
           {
            sysInfo = "Microsoft Windows XP Professional x64 Edition ";
           }
           else sysInfo = "Microsoft Windows Server 2003 ";
      }
    }
    break;
   }
  case 6://if(info.dwMajorVersion == 5 && info.dwMinorVersion == 1)
  {
   if(info.dwMajorVersion == 5)
   {
    sysInfo = "Microsoft Windows XP ";
   }
   else sysInfo = "Microsoft Windows Vista ";

    break;
  }
  case 5://if(infodwMajorVersion == 5 && infodwMinorVersion == 0 )
    sysInfo = "Microsoft Windows 2000 ";
    break;
  default://if(infodwMajorVersion <= 4 )
   sysInfo = "Microsoft Windows NT ";
   break;
  }
  if( bOsVersionInfoEx)
  {
   if(info.wProductType == VER_NT_WORKSTATION)
   {
    if(info.dwMajorVersion == 4) sysInfo += "Workstation 4.0 ";
    else
    {
     if(info.wSuiteMask & VER_SUITE_PERSONAL) sysInfo += "Home Edition ";
     else
     {
      if(info.wSuiteMask & VER_SUITE_ENTERPRISE) sysInfo += "Enterprise ";
      else
      {
       if(info.dwMajorVersion == 5 && info.dwMinorVersion == 1)
        sysInfo += "Professional ";
      }
     }
    }

   }
   else
    if(info.wProductType == VER_NT_SERVER)
    {
     if(info.dwMajorVersion == 5 && info.dwMinorVersion == 2)
     {
      if(info.wSuiteMask & VER_SUITE_DATACENTER) sysInfo += "Datacenter Edition " ;
      else if(info.wSuiteMask & VER_SUITE_ENTERPRISE) sysInfo += "Enterprise Edition " ;
           else if(info.wSuiteMask == VER_SUITE_BLADE ) sysInfo += "Web Edition ";
                else sysInfo += "Standard Edition ";
     }
     else
      if(info.dwMajorVersion == 5 && info.dwMinorVersion == 0)
      {
       if(info.wSuiteMask & VER_SUITE_DATACENTER) sysInfo += "Datacenter Server ";
       else if(info.wSuiteMask & VER_SUITE_ENTERPRISE) sysInfo += "Advanced Server ";
            else sysInfo += "Server ";
      }
      else  // Windows NT 4.0
      {
       if(info.wSuiteMask & VER_SUITE_ENTERPRISE)
         sysInfo += "Server 4.0, Enterprise Edition ";
       else sysInfo += "Server 4.0 ";
      }
    }
   }
  } // koniec wyjrywania systemu

 if(info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) // sprawdzanie Win no NT
 {
  switch(info.dwMajorVersion == 4 && info.dwMinorVersion)
  {
   case 4://if(info.dwMajorVersion == 4 && info.dwMinorVersion == 0)
    sysInfo = "Microsoft Windows 95 ";
    if(info.szCSDVersion[1] == 'C' || info.szCSDVersion[1] == 'B')
       sysInfo += "OSR2 ";
    break;

   case 14://if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
    sysInfo = "Microsoft Windows 98 ";
    if(info.szCSDVersion[1]== 'A' || info.szCSDVersion[1] == 'B')
       sysInfo += "SE ";
    break;
   case 94://(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
    sysInfo = "Microsoft Windows Millennium Edition ";
    break;
  }
 } // koniec sprawdzania Win no NT

 if(info.dwPlatformId == VER_PLATFORM_WIN32_NT && info.dwMajorVersion > 4)
 {
  pGPI = (PGPI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
                                                    "GetProductInfo");

  if(pGPI != NULL) pGPI(info.dwMajorVersion, info.dwMinorVersion, 0, 0, &dwType);

  switch( dwType )
  {
   case PRODUCT_ULTIMATE:
               sysInfo += "Ultimate ";
               break;
   case PRODUCT_PROFESSIONAL:
               sysInfo += "Professional ";
               break;
   case PRODUCT_HOME_PREMIUM:
               sysInfo += "Home Premium Edition ";
               break;
   case PRODUCT_HOME_BASIC:
               sysInfo += "Home Basic Edition ";
               break;
   case PRODUCT_BUSINESS:
               sysInfo += "Business Edition ";
               break;
   case PRODUCT_STARTER:
               sysInfo += "Starter Edition ";
               break;
  }
 }

 sysInfo += "(Build " + (String)info.dwBuildNumber + ") ";

 switch(info.wServicePackMajor)
 {
   case 1: sysInfo += "Dodatek Service Pack 1"; break;
   case 2: sysInfo += "Dodatek Service Pack 2"; break;
   case 3: sysInfo += "Dodatek Service Pack 3"; break;
 }

 Label1->Caption = sysInfo;
}


Uzyskamy taki efekt:

appinfo.png
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Corvis » czwartek, 28 kwietnia 2011, 12:09

Cyfrowy Baron napisał(a):Corvis co raz bardziej mnie zaskakujesz



Mogłem to poprawić i wiedziałem jak to zrobić. Ale jak napisałem wolałem zrozumieć temat: co się takiego zmieniło od 2010 do XE, że jest taka paranoja. Kiedyś chyba dawałeś jakiego linka odnośnie zmian w String-ach.

Dzięki za ten 2 kod zaraz sobie go przeanalizuje.

Twój sposób nie zadziała bo raz trzeba używać wchar_t a innym razem tej samej zmiennej jako *char. Trzeba rzutować.

Ja robiłem inaczej:

String sFileName;

i raz ją robiłem sFileName.w_str(); a innym razem sFileName.t_str();
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Corvis » czwartek, 28 kwietnia 2011, 13:01

KOD cpp:     UKRYJ  
    TCHAR* ExeName = Application->ExeName.w_str() ;
    DWORD dwInfoSize = GetFileVersionInfoSize(ExeName, &dwHandlev);
 



W XE nawet taki kod nie zwraca rezultatu zawsze dwInfoSize jest 0 :-(
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez polymorphism » czwartek, 28 kwietnia 2011, 13:12

(...) co się takiego zmieniło od 2010 do XE, że jest taka paranoja.

Być może panowie z Embarcadero zrozumieli, że nie ma sensu tkwić w kodowaniu ansi, i domyślnie ustawili unikod. To oczywiście spowodowało, że większość funkcji WinAPI oczekuje łańcuchów unikodowych, a nie jak wcześniej ansi. Dlatego poprawny kod WinAPI to nie coś takiego:
KOD cpp:     UKRYJ  
wchar_t sFileName[1024] = {0};

if(ModulePath == NULL) GetModuleFileName( NULL, sFileName, 1024);
else wcscpy(sFileName, (LPTSTR)ModulePath);

...

if(VerQueryValue(pVersionInfo, L"\\VarFileInfo\\Translation", &lpStr1, &dwLength))

tylko:
KOD cpp:     UKRYJ  
TCHAR sFileName[1024] = {0};

if(ModulePath == NULL) GetModuleFileName(NULL, sFileName, 1024);
else _tcscpy(sFileName, ModulePath);

...

if(VerQueryValue(pVersionInfo, TEXT("\\VarFileInfo\\Translation"), &lpStr1, &dwLength))
 

To się skompiluje w obu wersjach.

Oczywiście możesz jawnie określić, którą wersję funkcji chcesz użyć, dodając na koniec jej nazwy literę A lub W. Jeśli funkcja korzysta ze struktur, wtedy też musisz jawnie określić ich wersję.
KOD cpp:     UKRYJ  
wchar_t sFileName[1024] = {0};

if(ModulePath == NULL) GetModuleFileNameW( NULL, sFileName, 1024);
else wcscpy(sFileName, ModulePath);
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Corvis
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Corvis » czwartek, 28 kwietnia 2011, 13:26

Dzięki za wyjaśnienia

GetFileVersionInfoSizeW

Ta funkcja cały czas zwraca mi 0

KOD cpp:     UKRYJ  
wchar_t sFileName[1024] = {0};

if(ModulePath == NULL) GetModuleFileNameW( NULL, sFileName, 1024);
else wcscpy(sFileName, ModulePath);

int size = GetFileVersionInfoSizeW(sFileName,0);
 

Według helpa jak GetFileVersionInfoSizeW zwraca 0 to nie można odczytać informacji.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez polymorphism » czwartek, 28 kwietnia 2011, 13:30

GetLastError zwraca numer błędu, którego znaczenie możesz znaleźć w pliku winerror.h.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Corvis
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Corvis » czwartek, 28 kwietnia 2011, 13:35

1813
0x00000715

Szukam w pliku. Nigdy nie słyszałem o tej funkcji GetLastError i o tym pliku z błędami :-) Dzięki.
To jest jakoś zakodowane chyba ?
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Cyfrowy Baron » czwartek, 28 kwietnia 2011, 13:36

Czy w XE ustawia się mapowanie? Jeżeli tak to jakie są dostępne opcje mapowania, oraz na jakim mapowaniu testujesz ten kod?

Wklej informacje z pliku pomocy (XE) odnośnie funkcji GetFileVersionInfoSize.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez polymorphism » czwartek, 28 kwietnia 2011, 13:43

To jest jakoś zakodowane chyba ?

Co jest zakodowane?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Cyfrowy Baron » czwartek, 28 kwietnia 2011, 13:48

Corvis napisał(a):1813
0x00000715

Szukam w pliku. Nigdy nie słyszałem o tej funkcji GetLastError i o tym pliku z błędami :-) Dzięki.
To jest jakoś zakodowane chyba ?


Ten komunikat oznacza, że nie odnaleziono w zadanym pliku zasobu o kreślonej nazwie.


1813 ERROR_RESOURCE_TYPE_NOT_FOUND
The specified resource type cannot be found in the image file.




Plik pomocy, hasło: System Error Codes
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Corvis » czwartek, 28 kwietnia 2011, 13:49

Co jest zakodowane?


Numer błędu.

KOD text:     UKRYJ  
//
//  Values are 32 bit values laid out as follows:
//
//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
//   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
//  +---+-+-+-----------------------+-------------------------------+
//  |Sev|C|R|     Facility          |               Code            |
//  +---+-+-+-----------------------+-------------------------------+
Czy w XE ustawia się mapowanie? Jeżeli tak to jakie są dostępne opcje mapowania, oraz na jakim mapowaniu testujesz ten kod?


W takim jak ty wkleiłeś screena - mam wszystko tak samo.

Wklej informacje z pliku pomocy (XE) odnośnie funkcji GetFileVersionInfoSize.


W Builderze na kompie nie mam helpa korzystam z http://docwiki.embarcadero.com/RADStudio/en/Main_Page

tylko tam nie ma żadnej info :-(
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez polymorphism » czwartek, 28 kwietnia 2011, 13:53

Numer błędu.

Heh, wystarczy przewinąć plik niżej :D

1813 to ERROR_RESOURCE_TYPE_NOT_FOUND, a znaczy to tyle, że nie ma w pliku zasobu z informacjami o wersji.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postprzez Corvis » czwartek, 28 kwietnia 2011, 13:53

Wyłącznie i włączenie Include Version in Project - to pomogło i size jest już 1260 :-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Następna strona

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość