Aktywne Wpisy
Viesti +634
Rozwala mnie ta ostatnia nagonka na RODy – nic a nic nie wygląda na zorganizowaną ustawkę. Na co dzień deweloper to synonim najgorszego zła a tu nagle „oddajmy najlepsze tereny w mieście deweloperom, tylko oni tworzą przestrzeń dodaną w mieście”.
Też zwróćcie uwagę na to, że nie pada w takich tezach słowo sprzedajmy tylko oddajmy, przekażmy itp. Biednych deweloperów z pewnością nie stać na ziemię a oni tam by w czynie
Też zwróćcie uwagę na to, że nie pada w takich tezach słowo sprzedajmy tylko oddajmy, przekażmy itp. Biednych deweloperów z pewnością nie stać na ziemię a oni tam by w czynie
![Viesti - Rozwala mnie ta ostatnia nagonka na RODy – nic a nic nie wygląda na zorganiz...](https://wykop.pl/cdn/c3201142/a62cea8fab14505185f4b18cfb59b6ab08943e325d93485f0698c5833e14e205,w150.jpg?author=Viesti&auth=1a18292e3c5d9e0dc9594b69652b23b0)
źródło: 123
PobierzZawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Mam problem programirki. Robię z kolegą remake pewnego starego programu korzystając z bibliotek Qt. No i natrafiliśmy na kłopot. Po pierwsze wersja oryginalna tego programu jest skompilowana w 32 bitach na jakimś archaicznym środowisku CodeGear. Nawet nie wiem w sumie jaki tam jest kompilator. My korzystamy z 64 bitowego MSVC AMD.
Problem jest następujący. Stary program ma sobie wczytywanie i zapisywanie plików jakiegoś swojego formatu. To jest oczywiście byte array. Wymagana jest wsteczna kompatybilność z odczytywaniem tych plików, więc trzeba te stare pliki jakoś wczytywać i zapisywać do tego samego formatu. I nic nie jest problemem poza jednym miejscem - gdzie funkcja C++ fwrite/fread zapisuje/odczytuje structa w całości zajmując miejsce w pamięci na sizeof(struct). No i Qt nie ogarnia z tego co mi wiadomo czegoś takiego. Operatory >> QDataStream obsługują tylko typy podstawowe + qtowe, drugą opcją jest ReadRawData, więc po prostu wzięcie tego nieszczęsnego sizeof i odczytanie tablicy bajtów na yolo. No ale jak ja mam z tego skleić znowu structa? Ja mam kod źródłowy tego structa i już go wrzuciłem do nowego programu, ale nie jestem pewien czy rzutowanie tego tutaj zadziała? A nawet jeśli da się rzutować char array na struct, to czy kompilator na jakim to było zrobione nie ma znaczenia? W sensie - czy on odzyska wtedy faktycznie oryginał?
Ogółem chciałbym wiedzieć jak to zrobić po Qtowemu i czy to jest w ogóle możliwe. Bo opcją ostateczną jest po prostu, cóż - użycie tych samych funkcji C++, którymi plik był zapisywany. Ale chciałbym tego uniknąć aby po prostu nie sklejać frankenstaina raz odczytując tak a raz tak.
Prawda jest taka, że z tego structa interesują mnie dosłownie trzy pola będące unsigned intami, ale nie jestem wróżką aby wiedzieć, które bajty w zajmowanej pamięci to właśnie te wartości. A tam jeszcze wchodzą takie śmieci jak jakieś funkcje + konstruktory. Gdybym wiedział, które to bajty, to bym je po prostu wybebeszył z char array, rzutował na uint i miał to w dupie.
long
, wskaźniki i inne typy mogą mieć róƶne wielkości pomiędzy architekturami.Na windowsie na pewno x64 i x86 mają róƶne wielkości wskaźników (chociaƶ przy
fread
raczej ich tam nie ma), ale mimo wszystko bym uwaƶał z wczytywaniem kodu w całości i wypełniał/zapisywał te struktury po kaƶdym członku.https://gist.github.com/anonymous/d6b7654bdfce13e97e7e
To jest cały struct. On jest prosty, ale zawiera funkcje. A ja chcę wybebeszyć pola tylko i wyłącznie.
Ah, problem jest w tym, że ja nie mam możliwości go skompilować na tym starym dziadostwie za bardzo. Muszę szukać po omacku jak już. Mając po prostu zapisane pliki z już skompilowanego programu.
jak w klasie są zawarte funkcje wirtualne, to wtedy ewentualnie jest jeszcze vtable
#include
#include
QDataStream* stream = ...;
uint32t days = 0;
uint32t secs = 0;
uint32_t usecs = 0;
stream->readRawData(&days, 4);
stream->readRawData(&secs, 4);
stream->readRawData(&usecs, 4);
qDebug() << days << " " << secs << " " << usecs;
Tak wstępnie. Wychodzi na to, że same pola są chyba.
źródło: comment_UUJqmCecA2NaAyy4Anj4Mpe8KThFrAcG.jpg
Pobierz