Zitat:
In dem Code, den du gepostet hast, steht aber schon vector<short>, oder?
richtig
Code:
vector<short> &A1, vector<short> &A2
Ja A1 und A2 sind short dienen aber nur dazu um das Array(Record) zu sortieren. (Nach welchen Kriterien muss ich noch nachfragen)
Siehe dazu nochmal zum besseren Verständnis.
Delphi-Quellcode:
function TSkinSpriteContainer.GetObjectOrder(hParent: HWND): Integer;
var
gP, UB: Integer;
K, Count: Integer;
A1, A2: TArray<TgObj>;
buffer: array [0 .. 2048] of char;
begin
Count := 0;
gP := gPropertyItem(hParent);
if (gP > -1) then
begin
if (g_Prop[gP].Ordersize <> 0) then
begin
Result := gP;
exit;
end;
end;
UB := High(g_Obj);
if (UB > 0) then
begin
SetLength(A1, UB);
SetLength(A2, UB);
for K := 0 to UB do
begin
if (g_Obj[K].Handle = hParent) then
begin
SetLength(A1, Count + 1);
SetLength(A2, Count + 1);
A1[Count].Order := g_Obj[K].Order;
inc(Count);
end;
end;
SortShortTagArray(A1, A2, Count);
for K := 0 to Count do
MoveMemory(@(buffer[K * sizeof(Short)]), @A2[K], sizeof(Short));
FillChar(A1, sizeof(A1), 0);
FillChar(A2, sizeof(A2), 0);
if (gP < 0) then
begin
gP := High(g_Prop) + 1;
SetLength(g_Prop, gP + 1);
end;
g_Prop[gP].Handle := hParent;
MoveMemory(@g_Prop[gP].Order, @buffer[0], sizeof(buffer));
g_Prop[gP].Ordersize := Count;
end;
Result := gP;
end;
eventuell liegt hier schon mein Denkfehler
A1, A2: TArray<TgObj>;
A1, A2: TArray<SmallInt>;
Dann habe ich aber keinen zugriff auf die Variablen des Record.
A1[Count].Order := g_Obj[K].Order;
gruss