Zasoby tak dynamicznie

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
{$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.

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 ?

0

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

Pojawiał się wyjątek:

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

Ale już rozwiązałem problem. xd

0

Dobry zwyczaj, podaj jak, dla potomnych

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.

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)

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.

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ć.

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 ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1