Zasoby tak dynamicznie

Zasoby tak dynamicznie
Grzegorz16
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 11 lat
  • Postów:56
0

Witam,

mam problem z zasobami. Mianowicie chcę by moja aplikacja łączyła się z serwerem i aktualizowała się kiedy trzeba. Kiedy zachodzą jakieś zmiany tworzy ona odpowiednie pliki .res (oczywiście przy pomocy brcc32.exe). Po czym wysyła je na serwer. Podczas uruchamiania sprawdza czy są dostępne nowe aktualizacje i pobiera je. Tu zaś pojawia się problem, że nie wiem jak rozpakować teraz te pliki .res.
Dodam, że wszystko dzieje się podczas aktualizacji (sprawdzanie, pobieranie, wypakowanie i usuwanie), a pliki .res ściągane są do podkatalogu.

Próbowałem w ten sposób:

  • dodałem
Kopiuj
{$R \Temp\Plik.res}

i rozpakowywałem.

To działa, tylko wtedy kiedy plik jest od samego początku, czyli jak za pierwszym razem zadziałało, plik na końcu był kasowany. Po ponownym uruchomieniu aplikacji, pobiera ten sam Plik.res z serwera i wyskakuje mi wyjątek, że nie mogło wypakować zasobu.

Czy jest jakaś możliwość rozpakowania zasobów z tych plików?

Pozdrawiam, z góry dziękuje za pomoc.


Windows jest jak kobieta: ma ładną "etykietę", twierdzi, że potrafi wszystko i wszędzie, ale nie akurat wtedy, gdy tego chcesz.
reichel
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 14 lat
0

Chyba, zle podchodzisz do problemu. Co chesz uzyskac ?

Zasoby res mozna dodawac do biblioteki dll (pustej) i tak sciagac a potem je dodawac do aplikacji.
Co masz na mysli mowiac rozpakowac plik z zasobami ?


Grzegorz16
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 11 lat
  • Postów:56
0

Wypakować z zasobu pliki, które w nim są.

Pojawiał się wyjątek:

Kopiuj
Exception EResNotFound in module Project1.exe at 0001D495.
Resource I01 not found.

Ale już rozwiązałem problem. xd


Windows jest jak kobieta: ma ładną "etykietę", twierdzi, że potrafi wszystko i wszędzie, ale nie akurat wtedy, gdy tego chcesz.
reichel
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 14 lat
0

Dobry zwyczaj, podaj jak, dla potomnych


Grzegorz16
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 11 lat
  • Postów:56
0

Ten sposób działa co napisałem. Nie wiem, czemu wcześniej nie zauważyłem. Dzięki reichel za chęci pomocy.

Dodajemy jak zwykłe zasoby > Build All Projects > kasujemy pliki zasobów .res i działa.
Błąd wyskakuje wtedy, kiedy użyjemy Build All Projects, a pliki zasobów nie będą istnieć. Mimo, że kompilator pokaże ostrzeżenie o tym, że ich brakuje to plik .exe podmieni i wtedy wyskoczy podobny błąd.


Windows jest jak kobieta: ma ładną "etykietę", twierdzi, że potrafi wszystko i wszędzie, ale nie akurat wtedy, gdy tego chcesz.
Grzegorz16
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 11 lat
  • Postów:56
0

ojoj przeliczyłem się, działa, ale nie tak jak należy xd

ponawiam pytanko:
Czy jest sposób by program po stworzeniu pliku .res mógł z niego wypakować pliki, które są w nim zawarte? (oczywiście znając ResName i ResType)


Windows jest jak kobieta: ma ładną "etykietę", twierdzi, że potrafi wszystko i wszędzie, ale nie akurat wtedy, gdy tego chcesz.
reichel
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 14 lat
0

Sposob jest (poznac format pliku zasobow), jesli po resname itd jak to w delphi sie robi za pomoca resourcestream to do biblioteki dll. Generalnie bym wybral jakiegos 7zipa do trzymanai takich elementow.


Grzegorz16
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 11 lat
  • Postów:56
0

Mój sposób działa, ale nie tak jak należy, bowiem do programu jest dołączony "stały" plik .res... jednak, jeśli zmienię jego zawartość, wyśle go na serwer, to aplikacja pobierze ten zasób, ale odczyta ten, który był dołączony do aplikacji w czasie kompilowania. Ogólnie rzecz biorąc program odczytuje ten, który został dołączony do niego, a nie ten co został ściągnięty z serwera. Nawet jeśli utworze dll'ka, a w nim umieszczę zasób to wyjdzie na to samo, tylko, że aplikacja z nim będzie ważyć więcej.

Uczepiłem się tych zasobów, bo zamiast ściągać (dajmy na to) tysiące małych pliczków, wolę je spakować do zasobu, i ściągać tylko ten jeden plik, po czym go wypakować.


Windows jest jak kobieta: ma ładną "etykietę", twierdzi, że potrafi wszystko i wszędzie, ale nie akurat wtedy, gdy tego chcesz.
LU
  • Rejestracja:prawie 18 lat
  • Ostatnio:ponad 13 lat
0

sam kiedys szukałem sposobu na dynamiczne zasoby, ale nic nie znalazłem

najlepszym rozwiazaniem jest - jak ktos juz tutaj napisal - utworzyć pustą biblioteke dll i do niej dodać zasoby, wtedy mozna używać funkcji LoadModule ;]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.