![]() |
AW: 2 Arrays vergleichen\sortieren
Zitat:
------ Funktioniert leider nicht.. Danke. langsam nervt Delphi nur noch Ein einfaches MoveMemory oder auch CopyMemory ist das gleiche!
Delphi-Quellcode:
funktioniert nicht einmal.for K := 0 to g_Prop[gP].Ordersize do begin MoveMemory(@Item, g_Prop[gP].order + K * sizeof(short), sizeof(short)); Das Item sollte eigentlich inkrementieren tut es aber nicht. Das will der Compiler auch nicht. Ich verwende hier FillChar anstelle von FillMemory auch hier das gleiche spielt also keine rolle was ich verwende um den Speicher mit nullen zu füllen.
Delphi-Quellcode:
buffer: array [0 .. 2047] of Char;
.... FillChar(buffer, sizeof(buffer), 0); for K := 0 to Count do MoveMemory(@buffer[0] + K * sizeof(Short), @A2[K], sizeof(Short)); Zitat:
Und müssten eigentlich überall gleich funktionieren. Ein char bleibt ein char egal ob in c++ oder Delphi, ein Array bleibt ein Array. Warum macht der Compiler unter Delphi so einen Aufstand. Und ja short ist SmallInt spielt also keine rolle ob ich es direkt eingebe oder short verwende. Daran dürfte es nicht scheitern. Zitat:
gruss |
AW: 2 Arrays vergleichen\sortieren
Zitat:
Delphi-Quellcode:
. Wenn das nicht geht, dann
PByte(@buffer[0]) + K * sizeof(Short)
Delphi-Quellcode:
.
Pointer(NativeUInt(@buffer[0]) + K * sizeof(Short))
|
AW: 2 Arrays vergleichen\sortieren
Zitat:
Nur.. Das tue ich auch unter c++ da gibt es keine Probleme bei der gleichen Übergabe. Letztendlich verwenden beide sprachen die gleiche API darauf wollte ich hinaus. :) Um so mehr ich mit C++ Arbeite um so mehr stelle ich fest wie verkorkst die Sprache Delphi(Compiler) eigentlich ist. Was ist an MoveMemory in Delphi anders als in C++ eigentlich nichts.
Delphi-Quellcode:
Das gleiche Problem.
MoveMemory(Pointer(NativeUInt(@buffer[0])) + K * sizeof(Short), @A2[K], sizeof(Short));
Delphi-Quellcode:
Lässt sich kompilieren aber ob es richtig ist bzw.. die Daten korrekt verarbeitet werden ist mir nicht ersichtlich.
MoveMemory(PByte(@buffer[0]) + K * sizeof(Short), @A2[K], sizeof(Short));
Damit steht bzw. fällt das Projekt.
Delphi-Quellcode:
gruss
procedure TSkinSpriteContainer.gDrawZorderObjects(WinHandle: HWND; hDCdest: HDC;
InPrintMode: Integer); var K, Item, gP: Integer; begin Item := 0; // Draw objects with respect of the z-order gP := GetObjectOrder(WinHandle); if (gP > -1) then begin for K := 0 to g_Prop[gP].Ordersize do begin MoveMemory(@Item, g_Prop[gP].order + K * sizeof(short), sizeof(short)); // Das Item hier müsste inkrementiert werden geht aber nicht. // Draw only visible objects if (g_Obj[Item].Visible) then GI_DrawObject(hDCdest, g_Obj[Item], InPrintMode); end; end; end; |
AW: 2 Arrays vergleichen\sortieren
Zitat:
Du vergleichst C++ und Delphi und nennst Delphi verkorkst? :mrgreen: Delphi ist typsicher und das einzige was du brauchst ist ein Cast. Also kein großer Akt. Das Problem ist dass du manche Dinge eben nicht 1:1 übersetzen kannst und du übersetzt halt 1:1 und wunderst dich über Probleme ;) Du fährst besser wenn du versuchst den Code zu verstehen und den Kram sinngemäß in Delphi implementierst. So wie ich das sehe ist der C++ Code da nämlich DEUTLICH einfacher und kürzer in Delphi implementierbar. |
AW: 2 Arrays vergleichen\sortieren
Zitat:
|
AW: 2 Arrays vergleichen\sortieren
Zitat:
Zitat:
Also warum funktioniert es unter C++ und nicht mit Delphi. Bitte Sachlicher Hinweis und keine persönlichen Angriffe Herr Uwe Rabe. (Ich weis sie lieben Delphi) PS: Für mich ist es ein Werkzeug nichts anderes. Zitat:
Sorry ich sehe nicht das du dich mal daran versucht hättest.. Papier ist geduldig. gruss |
AW: 2 Arrays vergleichen\sortieren
Zitat:
MoveMemory ist wie gesagt eine Windows API und die KANN in Delphi nicht anders funktionieren als in C++.
Code:
=
MoveMemory(&buffer[0] + K * sizeof(short) , &A2[K], sizeof(short));
Delphi-Quellcode:
MoveMemory(Pointer(NativeUInt(@buffer[0]) + K * sizeof(Short)), @A2[K], sizeof(Short));
Edit: Soviel zu meinem Punkt "Der C++ Code ist unnötig kompliziert" (zumindest auf Delphi übertragen):
Delphi-Quellcode:
MoveMemory(@buffer[K * sizeof(Short)], @A2[K], sizeof(Short));
geht auch. Es hilft halt, wenn man den Code den man überträgt auch versteht ;) |
AW: 2 Arrays vergleichen\sortieren
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
eine 0 (bzw. 2 Nullen) im Speicher steht.
g_Prop[gP].order + K * sizeof(short)
Zitat:
Zitat:
Delphi-Quellcode:
im Index :P
SizeOf(Short)
|
AW: 2 Arrays vergleichen\sortieren
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
gruss |
AW: 2 Arrays vergleichen\sortieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz