Seite 1 von 1

Probleme mit ASM

Verfasst: 09.04.2006 11:45
von Arrag0n
Hallo

Habe hier eine Funktion die ich irgendwo mal im Board gefunden habe die es ermöglicht eine gesammte strucktur zu übergeben. Unter PB 3.94 hat sie perfekt funktioniert. Habe den Source auf Version 4 Adaptiert, jedoch bekomme ich immer eine ASM Fehlermeldung das ein undefiniertes Symbol sei?? :o
Das verstehe ich nicht. Ist es möglich das die Struckturen nicht mehr global sind?
Wenn ich den code der in DisplayAndHandle() ist lokal lasse funzt es perfekt!

Code: Alles auswählen

Structure wettkampf 
  Spielort.s 
  datum.s 
  gegner.s 
  Ergebnis.s 
  Spieler_1.s 
  Spieler_2.s 
  Spieler_3.s 
  Spieler_4.s 
  Spieler_5.s 
  Spieler_6.s 
  Spieler_7.s 
  Spieler_8.s 
  Spieler_9.s 
  Spieler_10.s 
  Spieler_11.s 
  Spieler_Ersatz1.s 
  Spieler_Ersatz2.s 
  Schiedsrichter.s 
EndStructure 

Global match.wettkampf 
Global Dim  jahresergebnisse.wettkampf(50) 
Global Dim statistik.wettkampf(1000) 

Procedure CopyStructure(source,dest,Size,StructureMap) 
  Protected i, StructureMapOffset 
  StructureMapOffset = 0 
  For i = 0 To Size-1 
    If PeekL(StructureMap+StructureMapOffset) = i 
      MOV Ecx, i 
      MOV Edx, Ecx 
      ADD Ecx, dest 
      ADD Edx, source 
      MOV Edx, dword[Edx] 
      CALL SYS_FastAllocateStringFree 
      
      StructureMapOffset+4 
      i+3 
    Else 
      PokeB(dest+i,PeekB(source+i)) 
    EndIf 
  Next 
EndProcedure 

Procedure DisplayAndHandle()
  Debug Str(@match\Spielort)+" :"+match\Spielort 
  Debug Str(@jahresergebnisse(8)\Spielort)+" :"+jahresergebnisse(8)\Spielort 
  Debug "Copy..." 
  
  CopySrc = @match 
  CopyDest = @jahresergebnisse(8) 
  CopySize = SizeOf(wettkampf) 
  CopyStructureMap = 0 
  !MOV dword[p.v_CopyStructureMap], p.s_wettkampf ;s_<Structure> 
  CopyStructure(CopySrc,CopyDest,CopySize,CopyStructureMap) 
  
  
  Debug Str(@match\Spielort)+" :"+match\Spielort 
  Debug Str(@jahresergebnisse(8)\Spielort)+" :"+jahresergebnisse(8)\Spielort 
  
EndProcedure


match\Spielort = "Wiesbaden" 
match\datum = "24.7.2004" 
match\gegner = "GSV" 
match\Ergebnis = "2:4" 
match\Spieler_1 = "Huber" 
match\Spieler_2 = "Müller" 
match\Spieler_3 = "Eszgön" 
match\Spieler_4 = "Krallmann" 
match\Spieler_5 = "König" 
match\Spieler_6 = "Lindauer1" 
match\Spieler_7 = "Lindauer2" 
match\Spieler_8 = "Schwieken" 
match\Spieler_9 = "Rülberg" 
match\Spieler_10 = "Steenken" 
match\Spieler_11 = "Schwelm" 
match\Spieler_Ersatz1 = "Zeppelin" 
match\Spieler_Ersatz2 = "Barth" 
match\Schiedsrichter = "von Weilen" 

DisplayAndHandle()
Arrag0n

Verfasst: 09.04.2006 12:20
von edel
Variablen in einer Procedure beginnen jetzt mit "p." (dword[p.v_CopyStructureMap])

Verfasst: 09.04.2006 12:26
von Arrag0n
Ja, Danke.

Ändert aber an der Situation nix. :?

Arrag0n

Verfasst: 09.04.2006 13:06
von HeX0R
wettkampf ist keine Variable!
Also

Code: Alles auswählen

!MOV dword[p.v_CopyStructureMap], s_wettkampf

Verfasst: 09.04.2006 13:32
von Arrag0n
@ hallodri
Sorry, habs erst jetzt verstanden.

@HeX0R
Vielen Dank! Das wars.
Bin in Sachen ASM leider noch nicht so bewandert!

Arrag0n

Verfasst: 10.04.2006 03:28
von Konne
Kann man strukturen nicht einfach mit copymemory()
copieren????

Verfasst: 10.04.2006 08:24
von Arrag0n
@Konne
Soweit ich das verstanden habe würde man bei strings nur den Verweis auf den Speicherbereich kopieren wo er liegt, und nicht den String.
Wenn man allerdings nur bytes, words, longs hat sollte es funzen.

Grüße Arrag0n