CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Problem z kompatybilnością

Problem z kompatybilnością

dział ogólny

Re: Problem z kompatybilnością

Nowy postprzez Cyfrowy Baron » sobota, 26 listopada 2011, 17:06

Zamknąłeś środowisko i projekt przed edycją pliku? Usunąłeś z katalogu projektu wszystkie pliki tymczasowe? Czasami pomaga samo usunięcie plików tymczasowych.
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: Problem z kompatybilnością

Nowy postprzez Pitek » sobota, 26 listopada 2011, 18:02

Tak dokładnie tak zrobiłem w dodatku środowisko nie dopisuje nic w to miejsce do pliku projektu a błąd dalej wyskakuje :( Pomocy
W załączniku zawartość mojego pliku projektu.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Problem z kompatybilnością

Nowy postprzez Cyfrowy Baron » sobota, 26 listopada 2011, 18:12

W tym pliku nie ma wpisu IDANTIFREEZE więc nic tutaj nie da się zrobić.
Usuń z katalogu projektu wszystkie pliki tymczasowe:

KOD text:     UKRYJ  
del *.~??
del *.~?
del *.obj
del *.tds
del *.#??
del *.pch
del *.ilc
del *.ild
del *.ils
del *.ilf


Potem wybierz w projekcie BUILD.
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: Problem z kompatybilnością

Nowy postprzez Pitek » sobota, 26 listopada 2011, 19:08

Już zrobiłem to przed napisaniem poprzedniego posta dalej nic i nie wiem co dalej robić gdzie szukać tego wpisu który każe mu go otwierać ?
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Problem z kompatybilnością

Nowy postprzez Cyfrowy Baron » sobota, 26 listopada 2011, 21:05

Jesteś pewien, że usunąłeś z plików źródłowych i nagłówkowych wszystkie wpisy odwołujące się do tej biblioteki?

W pliku nagłówkowym będą to wpisy:

KOD cpp:     UKRYJ  
#include "IdAntiFreeze.hpp"
#include "IdAntiFreezeBase.hpp"
#include "IdBaseComponent.hpp"


a w pliku źródłowym:

KOD cpp:     UKRYJ  
#pragma link "IdAntiFreeze"
#pragma link "IdAntiFreezeBase"
#pragma link "IdBaseComponent"
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: Problem z kompatybilnością

Nowy postprzez Pitek » sobota, 26 listopada 2011, 22:25

Działa, okazało się że na innej formatce tego programu znajdował się jeszcze taki sam komponent usunąłem go i potem jeszcze te wpisy i poszło, potem dodałem jeszcze raz ten sam komponent i jest ok.
Ale ciekawi mnie jeszcze sprawa z tym pobieraniem wersji programu bo jak wpisze w nawias pierwszą wartość NULL to działa ale intryguje mnie to czemu nie działa ten kod poniżej :
KOD cpp:     UKRYJ  
AnsiString wersja,nazwa;
nazwa = ExtractFileName(Application->ExeName);
wersja = GetFileVersionInfo(nazwa.c_str(), L"FileVersion");
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Problem z kompatybilnością

Nowy postprzez Cyfrowy Baron » sobota, 26 listopada 2011, 22:36

Pomieszałeś zmienne char z wchar_t.

Spróbuj tak:

KOD cpp:     UKRYJ  
UnicodeString wersja,nazwa;
nazwa = ExtractFileName(Application->ExeName);
wersja = GetFileVersionInfo(nazwa.t_str(), L"FileVersion");


Mapowanie ustaw na wchar_t.
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: Problem z kompatybilnością

Nowy postprzez Pitek » niedziela, 27 listopada 2011, 00:58

To nie działa wywala taki błąd :

[BCC32 Error] Unit10.cpp(100): E2285 Could not find a match for 'GetFileVersionInfoW(wchar_t *,const wchar_t *)'
Full parser context
Unit10.cpp(97): parsing: void _fastcall TForm10::FormShow(TObject *)


A to moje się kompiluje ale bez efektu :(
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Problem z kompatybilnością

Nowy postprzez Cyfrowy Baron » niedziela, 27 listopada 2011, 09:44

A ustawiłeś w opcjach projektu mapowanie na wchar_t? Czy zmodyfikowałeś funkcję GetFileVersionInfo by jako pierwszy argument pobierała wartość typu wchar_t, a nie char?

mapowanie.png


KOD cpp:     UKRYJ  
String GetFileVersionInfo(wchar_t *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};
 String sInfo;
 LPBYTE *pVersionInfo;

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

 DWORD dwInfoSize = GetFileVersionInfoSize(sFileName, &dwHandlev);

 if(dwInfoSize)
 {
  pVersionInfo = new LPBYTE[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;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
 UnicodeString wersja,nazwa;
 nazwa = ExtractFileName(Application->ExeName);
 wersja = GetFileVersionInfo(nazwa.t_str(), L"FileVersion");

 Edit1->Text = wersja;
}





KOD cpp:     UKRYJ  
nazwa = ExtractFileName(Application->ExeName);
wersja = GetFileVersionInfo(nazwa.t_str(), L"FileVersion");


Poza tym, jeżeli chcesz pobrać informacje o programie z którego funkcja jest uruchamiana to wystarczy podać wartość NULL. Czytaj w pliku pomocy:

KOD text:     UKRYJ  
GetModuleFileName

Retrieves the fully-qualified path for the file that contains the specified module. The module must have been loaded by the current process.

To locate the file for a module that was loaded by another process, use the GetModuleFileNameEx function.


DWORD WINAPI GetModuleFileName(
  HMODULE hModule,
  LPTSTR lpFilename,
  DWORD nSize
);

Parameters
hModule
[in] Handle to the loaded module whose path is being requested. If this parameter is NULL, GetModuleFileName retrieves the path of the executable file of the current process.


Poza tym należy przekazać całą ścieżkę dostępu do pliku programu, a nie tylko nazwę pliku programu. W przypadku programu z którego funkcja jest uruchamiana to na ogół zadziała, ale jeżeli chcesz pobrać wersję innego programu, to należy podać całą ścieżkę dostępu do pliku tegoż programu. Przecież może być uruchomionych kilka procesów o identycznej nazwie:

KOD cpp:     UKRYJ  
 Edit1->Text = GetFileVersionInfo(L"c:\\Program Files\\TC UP\\TOTALCMD.exe", L"FileVersion");


U mnie to wszystko działa.
Patrząc jak piszesz ten kod, jak chociażby to, że po zmianie argumentów przekazywanych funkcji nie zmieniłeś typu argumentu w samej funkcji, zaczynam się zastanawiać czy nie popełniasz jeszcze innych błędów. Tak to już niestety jest jak się przepisuje kod bez zrozumienia.
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: Problem z kompatybilnością

Nowy postprzez Pitek » poniedziałek, 28 listopada 2011, 16:38

Eh... Ja to wszystko rozumiem ale proszę mnie zrozumieć u mnie czyli na XE2 to już nie działa.
Oczywiście działa to z użyciem NULL tylko wyświetla albo 1.0.0.0 albo puste pole dlatego chciałbym wiedzieć jak zapisać to ze zmienną przechowującą ścieżkę z nazwą pliku i już.
Pokazany przez Pana przykład u mnie nie działa o czym z resztą mówiłem w poprzednich postach.
A wszystkie ustawienia mam poprawne to też robiłem w poprzednich postach, być może zamieszanie jest związane z tym że odświeżyłem ten temat po chyba 5 czy 6 tygodniach i tyle.

EDIT: Z moich obserwacji wynika że funkcja pobierająca wersję pliku nie działa na XE2 ponieważ podanie ręczne ścieżki do pliku wraz z nazwą i rozszerzeniem również nie działa (wyświetla się puste pole).
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Problem z kompatybilnością

Nowy postprzez Cyfrowy Baron » wtorek, 29 listopada 2011, 09:59

Zajrzyj więc do pliku pomocy pod hasło GetModuleFileName i podaj tutaj co tam jest napisane.

Sprawdź jakimś innym programem, czy potrafi prawidłowo odczytać wersję aplikacji stworzonej w XE2. Wejdź we właściwości pliku aplikacji i sprawdź czy na zakładce Wersja prawidłowo jest wyświetlana wersja pliku. Pomoże to ustalić, czy problem dotyczy funkcji odczytującej wersje pliku, czy też ma to związek z zasobami tworzonymi w XE2.

W internecie nie natknąłem się na informacji o problemach z pobraniem informacji o wersji pliku w XE2, więc albo jest na to za wcześnie, albo ten problem występuje tylko u Ciebie. Tutaj prośba do Corvis'a jeżeli czyta ten post, by sprawdził czy u niego ten problem również występuje.

Do Ciebie mam jeszcze pytanie, czy zainstalowałeś poprawkę Update 2 do XE2. Być może ta poprawka naprawia już ten błąd w tym środowisku.
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: Problem z kompatybilnością

Nowy postprzez Pitek » wtorek, 29 listopada 2011, 23:14


System.GetModuleFileNameFrom RAD Studio VCL Reference

Delphi

function GetModuleFileName(Module: HMODULE; Buffer: PChar; BufLen: Integer): Integer;[edit] Properties
Type Visibility Source Unit Parent
function public System.pas System System

Returns the fully qualified name for a module, given its handle.

Call GetModuleFileName to obtain the fully qualified name of a module, given its handle. The version of GetModuleFileName defined in the System unit is available only on Linux and Macintosh. On Windows, use the Windows API with the same name instead.

Module is the handle of the module whose file name is required.

Buffer is a buffer that receives the file name.

BufLen is the number of bytes in Buffer.

GetModuleFileName returns the number of bytes written to Buffer.

Warning: GetModuleFileName is not always successful. Depending on the way the application is called, the presence of the /proc file system, and other factors, there are times when GetModuleFileName may return a name that is not fully qualified or, in some cases, no file name at all. Be sure to check the results of this function before using the returned value.


To tyle co pisze u mnie w helpie i nie bardzo wiem w jakim programie mogę podejrzeć wersję pliku.... a co do Update 2 to nie mam go zainstalowanego.... bo nie mam go jak pobrać ze strony Embarcadero.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: Problem z kompatybilnością

Nowy postprzez Corvis » wtorek, 29 listopada 2011, 23:21

Czyta czyta :-)

Jutro sprawdzę, jestem w trakcie zmiany systemu na WINDOWS 7 64bity. Jak wgram i skonfiguruję to dam znać.

EDIT:

Miałem podobne jaja z tą funkcją po wgraniu Update 2 wszystko przeszło :-) Ma jeszcze XE2 trochę dziur ale rozmawiałem z Pawłem Głowackim z Embarcadero i kolejne Update-y są w drodze :-)
"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: Problem z kompatybilnością

Nowy postprzez Cyfrowy Baron » środa, 30 listopada 2011, 13:31

pitek3010 napisał(a):nie bardzo wiem w jakim programie mogę podejrzeć wersję pliku


No nie żartuj... :shock:

Może tak jak napisałem wcześniej:

Cyfrowy Baron napisał(a):Wejdź we właściwości pliku aplikacji i sprawdź czy na zakładce Wersja prawidłowo jest wyświetlana wersja pliku.
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: Problem z kompatybilnością

Nowy postprzez Pitek » środa, 30 listopada 2011, 13:34

A tak to jasne ze jest wyświetlana ;/ ale co mi to daje jak i tak to nie działa?
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Poprzednia stronaNastę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 5 gości