Bereich in Bereich kopieren

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Bereich in Bereich kopieren

      Ich hab mal wieder ein ganz banales Problem: ich will einen Bereich in einen anderen kopieren. Dabei ist der Zielbereich großer als der Quellbereich und jener soll auch nicht an den Anfang kopiert werden. Gibts da profaneigene Mittel oder muss ich auf APIs zurückgreifen? Ich hab in der Hilfe nichts gefunden. APIs sind kein Problem, es wäre mir aber lieber das mit hauseigenen Mitteln zu lösen.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • Bei den Bereichs-Funktionen/Befehlen hast du doch das Offset :
      Also so :


      Quellcode

      1. Declare Memory bereich, bereich1, bereich2
      2. Cls
      3. Dim bereich, 100
      4. Dim bereich1, 4
      5. Dim bereich2, 15
      6. Long bereich1, 0 = 100
      7. String bereich2, 0 = "Hello World !"
      8. Long bereich, 10 = Long(bereich1, 0)
      9. String bereich, 20 = String$(bereich2, 0)
      10. Print Long(bereich, 10)
      11. Print String$(bereich, 20)
      12. Waitkey
      Alles anzeigen
      An 11. Stelle steht dann die 100 und ab der 21. Stelle der String.

      Außerdem kann man ja auch noch mit Strukturen, Unions und Arrays
      von Bereichen arbeiten. Das geht evtl. etwas leichter.

      Oder meinst du jetzt was ganz anderes ?

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von H.Brill ()

    • Naja, ist String$() auch geeignet wenn der Bereich andere Daten enthält?

      Ich hätte sonst RtlMoveMemory oder RtlCopyMemory oder wie die API heißt genommen. Oder auch Ltr..., falls das schneller ist.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • Ja ich weiß, aber ich könnte mir vorstellen, dass die Geschwindigkeit drunter leidet. Soweit ich weiß sind Operationen mit Strings recht langsam. Ich glaube ich jutze einfach die API, das ist schnell gemacht.

      Danke für die Mühe.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • Ich hab grad geschaut, die API CopyMemory kopiert einen Bereich in einen anderen, aber das geht nicht mit Offset. Weiß jemand wie das geht?
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • Und möchtest du mich an deiner Weisheit teilhaben lassen?
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • Ach so, das war ernst gemeint....
      CopyMemory ist mit XProfan so nicht ohne weiteres nutzbar. Was du stattdessen nutzen solltest, ist RtkMoveMemory.

      Microsoft schrieb:

      Remarks

      This function is defined as the RtlCopyMemory function. Its implementation is provided inline. For more information, see WinBase.h and WinNT.h.
      If the source and destination blocks overlap, the results are undefined. For overlapped blocks, use the MoveMemory function.

      MoveMemory schrieb:

      Remarks
      This function is defined as the RtlMoveMemory function. Its implementation is provided inline. For more information, see WinBase.h and Winnt.h.
      Die Adresse einer Bereichvariablen ist Variable#. Will du den Bereich 4 Bytes ab dem Offset haben, ist das Variable# + 4.
      ________________________________________________________

      PPFScanner PPFS Android MisterXMail@web.de
      Mfg AHT
    • Die Bereiche überlappen sich nicht, wo ist da der unterschied zwischen Copy und Move?
      Außerdem hatte ich nicht damit gerechnet zur Adresse des Bereichs einfach was zu addieren. Das erschien nur zu einfach.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • HM, ok. Macht ja dann eh keinen Unterschied.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • Jo, ich weiß. Da ist auch die Richtung entscheidend. Aber hab ja geschrieben, dass es 2 Bereiche sind. Da ists eigentlich egal.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 6 256GB Midnight Black
      http://jacdelad.bplaced.net
    • Quellcode

      1. $H "C:\XProfan\Include\Windows.ph"
      2. ' *************************************
      3. ' bool = Move_Mem( pointer Ziel, Quelle [, long Anzahl] )
      4. ' Speicherinhalte kopieren
      5. ' Der angegebene Quellbereich wird in den Zielbereich kopiert.
      6. Proc Move_Mem
      7. Declare long PC
      8. PC = %PCount
      9. Declare pointer Ziel, Quelle, long zLen, qLen, Anzahl
      10. If PC = 2
      11. Parameters pointer Ziel2, Quelle2
      12. Ziel = Ziel2
      13. Quelle = Quelle2
      14. Else
      15. Parameters pointer Ziel3, Quelle3, long Anzahl3
      16. Ziel = Ziel3
      17. Quelle = Quelle3
      18. Anzahl = Anzahl3
      19. EndIf
      20. Case (Ziel = 0) or (Quelle = 0) : Return 0
      21. zLen = SizeOf_Mem( Ziel )
      22. qLen = SizeOf_Mem( Quelle )
      23. Case zLen < qLen : qLen = zLen
      24. CaseNot qLen : Return 0
      25. CaseNot Between(Anzahl, 1, qLen) : Anzahl = qLen
      26. ~MoveMemory( Ziel, Quelle, Anzahl )
      27. Return 1
      28. EndProc
      29. ' *************************************
      30. ' long SizeOf_Mem( long pMem )
      31. ' Größe des belegten Speichers ermitteln
      32. ' Ermittelt die Speichergröße auf die der Speicherzeiger zeigt.
      33. ' Liefert die Größe des Bereiches zurück.
      34. Proc SizeOf_Mem
      35. Parameters pointer pMem
      36. Declare handle hMem
      37. Var long Size = 0
      38. CaseNot pMem : Return 0
      39. hMem = ~GlobalHandle( pMem )
      40. If hMem
      41. Size = ~GlobalSize( hMem )
      42. CaseNot Size : ~GetLastError()
      43. EndIf
      44. Return Size
      45. EndProc
      Alles anzeigen
      Programmieren, das spannendste Detektivspiel der Welt.