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

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postNapisane: czwartek, 28 kwietnia 2011, 13:56
przez Cyfrowy Baron
Co do błędu odpowiedziałem z swoim poprzednim poście.



Corvis napisał(a):W Builderze na kompie nie mam helpa korzystam z http://docwiki.embarcadero.com/RADStudio/en/Main_Page


Chyba można pobrać z sieci pliki pomocy do środowiska? Tak jak w Embarcadero RAD Studio 2010?! :o

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postNapisane: czwartek, 28 kwietnia 2011, 13:57
przez Corvis
Można ale poco marnować pare GB danych :-) jak to to samo co w necie ??

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postNapisane: czwartek, 28 kwietnia 2011, 14:01
przez Cyfrowy Baron
Corvis napisał(a):Można ale poco marnować pare GB danych :-) jak to to samo co w necie ??


No co ty. Taką pomoc w sieci jak podałeś niżej to każdy ma, ale po pobraniu plików pomocy masz normalne pliki pomocy. W Emabracdero RAD Studio 2010 nie masz kompletnej dokumentacji??? :o



Corvis napisał(a):Wyłącznie i włączenie Include Version in Project - to pomogło i size jest już 1260 :-)


Rozmiar (czego) czy komunikat błędu, gdyż już się gubię?!?

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postNapisane: czwartek, 28 kwietnia 2011, 14:03
przez Corvis
KOD cpp:     UKRYJ  
int size = GetFileVersionInfoSizeW(sFileName,0);


Akurat W 2010 miałem pobraną pomoc. W XE jakoś mi się nie chciało bo kończe projekty w 2010. Teraz zaczynam nowy w XE, doinstaluje tą pomoc i zobaczę co to będzie.

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postNapisane: czwartek, 28 kwietnia 2011, 14:07
przez Cyfrowy Baron
Pliki pomocy w Embarcadero RAD Studio 2010 zajmują 335 MB, więc w XE będzie podobnie.

Nie wyobrażam sobie używania środowiska bez kompletnej dokumentacji opierając się tylko na bardzo ubogiej i rozwijanej przez internautów pomocy! :shock:



KOD cpp:     UKRYJ  
int size = GetFileVersionInfoSizeW(sFileName,0);


Myśle, że określanie tej funkcji jako Unicode (W) jest zbędne, gdyż jak w C++Builder 2010 jest to funkcja domyślna. Co innego, gdybyś chciał nadal używać zmiennych char i AnsiString, wtedy powinieneś użyć funkcji GetFileVersionInfoSizeA.

Re: Pobranie wersja aplikacji - problem z funkcją

Nowy postNapisane: czwartek, 28 kwietnia 2011, 14:19
przez Cyfrowy Baron
Z tego co się zorientowałem w to kwestii AnsiString, UnicodeString, char i wchar_t oraz w większości bibliotek, w XE nic się nie zmieniło w stosunku do 2010. Dlatego podany niżej kod oparty na wchar_t powinien działać w XE bezproblemowo. Przy mapowaniu ustawionym na char powinien działać na zmiennych AnsiString i char:

KOD cpp:     UKRYJ  
AnsiString 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};
 UnicodeString sInfo;
 LPVOID* pVersionInfo;

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

 DWORD dwInfoSize = GetFileVersionInfoSize(sFileName, &dwHandlev);

 if(dwInfoSize)
 {
  pVersionInfo = new LPVOID[dwInfoSize];
  if(GetFileVersionInfo((char*)(LPSTR)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;
}