Sie sind nicht angemeldet.

41

Freitag, 16. März 2018, 19:44

Wenn du gerade in einer Methode des Objekts bist würde ich p *pself versuchen.
Rainer
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

42

Freitag, 16. März 2018, 21:57

lea bp, lineattr..... does the trick.

Der Code, den Du oben angehängt hast, funktioniert bezüglich der diskutierten Aspekte.

Es gibt 2 Themen:

1.) Du verwendet GCGOAM als Objet direkt.
Das ist aber falsch, weil dies aus dem Template-Block kommt und nur als Kopie konkret verwendet wird. (MSG_GEN_DOCUMENT_INITIALIZE_DOCUMENT_FILE/ObjDuplicateResource) Entsprechend reflektiert es auch die erwarteten Änderungen nicht und hat keine Initialisierung für das VM-File.

Ich habe folgendes angepaßt:

in
@method DGDocumentClass, MSG_GET_OBJEKTGROESSE
{
...
/* Ask the right object */
index=@call ConstructOptr(HandleOf(bodyOD), ChunkOf(@GCGOAM))::MSG_GOAM_GET_LINE_WIDTH();
...
}

in
@method GCGrObjAttributeManagerClass, MSG_GOAM_GET_LINE_WIDTH
{
...
/* Pass the right object pointer */
dicke=la(linetoken, oself);
...
}


2-) Wenn man bp (über lea) in der Methode verändert, muß man Originalzustand aufheben und wiederherstellen.
ich habe also nach ".enter" "push bp" gemacht und vor dem ".leave" "pop bp". Warum es über "uses bp" nicht funktioniert, ist mit aktuell noch nicht ganz klar.

Viel Spaß beim probieren :-)

43

Samstag, 17. März 2018, 12:49

Wowh!! Es funktioniert :thumbsup:
Danke Falk!!
Die Begründung, warum GCGOAM nicht direkt angesprochen werden darf, habe ich noch nicht verstanden. Aber es erklärt, warum ich für das GOAMI_lineAttrArrayHandle immer nur den Wert 0 bekam. Jetzt steht dort ein sinnvoller Wert. Und Rainer: p *pself funktioniert.
Ich verstehe auch nicht, warum ich bp zu Beginn sichern muss, da die Doku bei Verwendung von .enter und .leave einen Automatismus für bp zusichert.
Na ja, egal! Jetzt komme ich endlich weiter. Das nächste Problem wird sein, die asm-Prozedur in mein eigentliches Projekt zu integrieren. Im Spielprojekt brauchte ich ja nur die .h und .asm - Dateien zu erstellen und mkmf und pmake haben diese Dateien sofort erkannt und verarbeitet. Wenn das Projekt aber aus mehreren .goc - Dateien besteht, dann braucht man eine zusätzliche Manager.asm - Datei und (vermutlich) noch eine .def - Datei.

44

Samstag, 17. März 2018, 18:35

So, die angesprochene Klippe ist auch umschifft: Der Name des Ordners, in dem sich meine asm-Prozedur und die Manager-Datei befinden, muss sich im Namen der Manager-Datei wiederfinden.
Ordnername: lineasm
Inhalt: lineattr.asm, lineasmManager.asm

45

Samstag, 17. März 2018, 20:09

Die Begründung, warum GCGOAM nicht direkt angesprochen werden darf, habe ich noch nicht verstanden.
Hast du eine multi launchable Application, d.h.kannst du mehrere Instanzen von deinem Programm starten?
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

46

Samstag, 17. März 2018, 23:46

Das Spielprojekt war multi. Mein eigentliches Projekt hab ich bisher auf single gestellt. Wieso?

47

Sonntag, 18. März 2018, 10:04

OK, wenn ich vorher in den Code geschaut hätte, bräuchte ich die Frage eigentlich nicht. In einer single-Application kannst du jedes Objekt mit Namen ansprechen, weil die Resource, in der es deklariert ist, direkt benutzt wird.
Du machst folgendes:

Quellcode

1
	dupMem = ObjDuplicateResource( OptrToHandle( @DGBody ), 0, 0);

Damit sind die Objekte als Kopie im neuen Block, die Chunkhandles sind die gleichen, aber das MemHandle unterschiedet sich.
Folglich machst du ganz korrekt:

Quellcode

1
  @send ConstructOptr(dupMem, OptrToChunk(@GCGOAM))::MSG_GOAM_CREATE_ALL_ARRAYS();

Das spricht die Kopie im neuen Block an. Würdest du hingegen machen:

Quellcode

1
@send GCGOAM::MSG_GOAM_CREATE_ALL_ARRAYS();

würdest du das Orginal im der Template-Resource ansprechen. Genau das hattest du aber vom Prinzip her in deinem Code gemacht.

Nach der Multi Application habe ich gefragt, weil dort jede Objektresource vor der Benutzung dupliziert wird, weil unterschiedliche Instanzen der App unterschiedliche Objekte haben müssen, die können ja unterschiedliche Dinge anzeigen.
Deswegen brauchst du das GeodeGetOptrNS(), statt den Namen direkt anzusprechen. Dort lauert dieses Problem also bei jedem Objektzugriff.

Rainer
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

48

Sonntag, 18. März 2018, 12:09

Es kann ja so einfach sein :) . Danke!!

49

Donnerstag, 7. Juni 2018, 20:20

Ich muss diesen Thread doch noch weiterführen:(

Obwohl der Zugriff auf die Liniendicke ja erfolgreich war, meint Swat nunmehr meckern zu müssen;). Die Fehlermeldung von Swat kann ich aber überhaupt nicht einordnen, auch wenn ich genau weiß, an welcher Stelle im Projekt sie ausgelöst wird. Vielleicht kann mir jemand die Bedeutung dieser Meldung errklären:

Death due to C_METHOD_HANDLER_TRASHED_DI
CallCHandler+18: MOV AX, 644 (0284h)
Execution died in patient geos:
CallCHandler+18: MOV AX, 644 (0284h)
A C message handler returns DI as the "MethodParameterDef", which contains
information about what kind of data is being returned by the handler, and
how to map that data into the appropriate registers. This FatalError is
hit if an invalid type is returned in DI. This usually means that DI was
changed by the method handler.

Wilfried

50

Sonntag, 10. Juni 2018, 17:44

Rainer oder Falk, habt ihr keine Idee, was diese Swat-Meldung bedeutet bzw. was ich dagegen machen kann? Mit dem Register DI haben meine C-Message-Handler doch gar nichts zu tun.

Wilfried

51

Montag, 11. Juni 2018, 09:04

Nö, kein Plan. Und keine Zeit. Poste doch mal den Code, der die Meldung triggert. Und vielleicht die Stackframes (Swat Kommando bt).
Rainer
Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

52

Montag, 11. Juni 2018, 21:56

Kann das ein ähnliches Problem wie das hier sein?!

http://homepage.o2mail.de/jpolzfuss/Geos/sdkbugs/vm.htm
d[ 0_O ]b

53

Dienstag, 12. Juni 2018, 16:00

Ich weiß nicht, ob es da einen Zusammenhang zu meinem Problem gibt. Wenn aber doch, dann wäre das Debuggen mit Swat nur noch begrenzt möglich.

Zur Zeit sind neben Ihnen 3 Benutzer in diesem Thema unterwegs:

3 Besucher

Thema bewerten