HookEngine i Calle jak używać 14003 26

O temacie

Autor Siemekk

Zaczęty 7.01.2016 roku

Wyświetleń 14003

Odpowiedzi 26

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Dokumentacja Ikarusa + translator, chyba że ogarniasz niemiecki. To na początek powinno wystarczyć.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Z translatorem jakoś idzie xD. Udało mi się powoli dojść do 342 linijki dokumentacji i teraz zastanawia mnie jedno (Pointery) ptr + 0: int unten_bräunungsgrad//To jest z tej Class'y Kanapka
ptr + 4: int oben_Gebuttert
ptr + 8: ciąg käse_name
ptr + 28: int käse_fettgehalt
ptr + 32: int unten_bräunungsgrad
ptr + 36: int unten_Gebuttert
Tak jak Avallach pisał są to adresy w pamięci. Tylko jak się je wyznacza? Są tutaj różne liczby 4,8 aż tu nagle 28? skąd się wzięło to 28?
(Należy pamiętać, że całkowita 4-bajtowy ciąg długi i 20 bajtów)To przetłumaczył mi tłumacz... cóż to może oznaczać dokładniej? Wiem że wszystkie adresy są 8-bitowe, więc czy ptr liczy się z pomocą adresów?
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Pointer a adres to to samo.
To co zacytowałeś trudno mi przetłumaczyć nie znając oryginału. Mogę zgadywać że chodzi o to że wartości całkowitoliczbowe (typ int) są zapisywane na 4 bajtach. Przeklej oryginalny fragment z którym masz problem to wyjaśnię. Nie znam niemieckiego, ale omawiane tam sprawy wywodzą się z C++ i ogólniej działania programów i procesora. Dużo łatwiej zrozumieć to będąc po studiach, znając przynajmniej podstawy architektury komputera, C++ i assemblera.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Ein Zeiger ist ein vier Byte großes Speicherwort und enthält die Adresse
eines anderen Objekts. In aller Regel weiß man von welchem Typ das
Objekt ist, auf das der Zeiger zeigt. Als Datentyp des Zeigers gibt man
den Datentyp des Objekts an, auf das gezeigt wird und versieht diesen
mit einem *. Nehmen wir mal an, wir treffen auf folgendes:

var int ptr; //cSandwich*

Dass ptr als Integer deklariert ist, soll uns nicht weiter stören, der
wahre Datentyp steht im Kommentar: Es ist (kein cSandwich aber) ein
Zeiger auf ein cSandwich (die Klasse aus dem vorherigen Abschnitt). Das
heißt, nimmt man den Wert von ptr her und interpretiert ihn als Adresse,
wird man an dieser Adresse ein cSandwich im Speicher vorfinden. An
folgenden Adressen ist also folgendes zu finden:

ptr + 0     : int oben_bräunungsgrad
ptr + 4     : int oben_Gebuttert
ptr + 8     : string käse_name
ptr + 28    : int käse_fettgehalt
ptr + 32    : int unten_bräunungsgrad
ptr + 36    : int unten_Gebuttert     

(man beachte, dass ein Integer 4 Byte und ein String 20 Byte groß ist)

Es kann auch sein, dass ein Zeiger auf gar kein Objekt zeigt. Dann ist
sein Wert (als Zahl interpretiert) 0. Man spricht von einem Null-Zeiger.
Zum Beispiel könnte ein Zeiger auf die aktuelle Spielsitzung Null sein,
solange der Spieler noch im Hauptmenü ist und gar keine Sitzung
existiert.

Natürlich gibt es auch Zeiger auf Zeiger. Diese sind dann entsprechend
mit zusätzlichen Sternen gekennzeichnet.
Proszę problem mam ze zrozumieniem skąd pojawiają się liczby obok pointerów (np. ptr + 28) skąd się to wzięło.
Co do studiów to jeszcze mi daleko xD W szkole jedyne co mieliśmy na razie to zrozumienie systemów liczbowych (HEX, DEC, OCT i BIN) które w miarę rozumiem...
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To jest opis struktury obiektu typu cSandwich. Zapewne jest ona podana w pobliżu. Z tego co wkleiłeś, można wnioskować że wyglądałaby ona tak:
class cSandwich
{
var int oben_bräunungsgrad;
var int oben_Gebuttert;
var string käse_name;
var int käse_fettgehalt;
//i tak dalej
}
Skądś masz wskaźnik (czyli adres w pamięci, czyli liczba bajtów licząc od początku dostępnej pamięci) na instancję tej klasy (czyli obiekt, który ma w pamięci taką strukturę jak powyżej: kolejno dwie liczby, tekst, liczbę i tak dalej). Każdy typ (zarówno złożona klasa, jak i prosty "int" i inne) ma swój rozmiar. int ma rozmiar 4 bajty, string ma 20.
Pierwszy element twojego obiektu będzie pod adresem takim jak twój obiekt (bo jest w tym obiekcie na samym początku).
Drugi element będzie miał adres taki jak twój obiekt + rozmiar pierwszego elementu. Pierwszy element był intem, czyli drugi element jest pod adresem ptr+4. I tak dalej. ptr + 28 wzięło się stąd, że przed tym elementem mamy kolejno int, int, string. Czyli ptr+4+4+20.

To wyjaśnienie podstawowych zasad działania adresów i struktur w pamięci.

Wowoz

Wowoz

Użytkownicy
Wowoźny
posty3698
Propsy4862
NagrodyVV
Profesjabrak
  • Użytkownicy
  • Wowoźny
Boże nawet ja to wiedziałem :F
 

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Widzisz ile rzeczy cię omija, jak nie modujesz Gothica? :F
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry