Also das Array ist definitiv falsch unter 32Bit
Aber!
Warum wird das von 64Bit akzeptiert und in 32Bit nicht?
Wäre schön wenn mir das jemand erklären könnte.
32Bit
Ich muss die länge des Array lItemsInfoArray auf StringList.Count setzen = 172 Einträge.
Die 64Bit Version
SetLength(lItemsInfoArray, length(ItemsInfo));
gibt mir nur 160 Einträge zurück. Warum ??
Delphi-Quellcode:
StringList := TStringList.Create;
try
ItemCount := ListView_GetItemCount(hListView);
SubItem := ItemsInfo[0].SubItem;
for IntI := 0
to ItemCount - 1
do
begin
ZeroMemory(@buf, sizeof(buf));
ListView_GetItemText(hListView, IntI, 1, buf, Length(buf));
ItemText := buf;
StringList.Add(ItemText);
// Stringliste anhand der Sortierung erstellen.
end;
SetLength(lItemsInfoArray, StringList.Count);
try
for IntI := StringList.Count
downto 0
do
begin
j := StringList.IndexOf(ItemsInfo[IntI].IdentStr);
if j >= 0
then
begin
lItemsInfoArray[j] := ItemsInfo[IntI];
StringList[j] := '
Vorhanden';
end;
end;
for IntI := High(lItemsInfoArray)
downto Low(lItemsInfoArray)
do
ItemsInfo[IntI] := lItemsInfoArray[IntI];
except
raise Exception.Create(SysErrorMessage(GetLastError));
end;
finally
StringList.Free;
end;
Unter 64Bit ist es die korrekte länge.
Delphi-Quellcode:
StringList := TStringList.Create;
try
ItemCount := ListView_GetItemCount(hListView);
SubItem := ItemsInfo[0].SubItem;
for i := 0 to ItemCount - 1 do
begin
ZeroMemory(@buf, sizeof(buf));
ListView_GetItemText(hListView, i, SubItem, buf, SizeOf(buf));
ItemText := buf;
StringList.Add(ItemText); // Stringliste anhand der Sortierung erstellen.
end;
SetLength(lItemsInfoArray, length(ItemsInfo));
for i := High(ItemsInfo) downto Low(ItemsInfo) do
begin
j := StringList.IndexOf(ItemsInfo[i].IdentStr);
if j >= 0 then
begin
lItemsInfoArray[j] := ItemsInfo[i];
StringList[j] := 'Vorhanden';
end;
end;
for i := High(lItemsInfoArray) downto Low(lItemsInfoArray) do
ItemsInfo[i] := lItemsInfoArray[i];
finally
StringList.Free;
end;
Wieder so eine Sache die mich extrem nervt.
64Bit gibt mir die korrekte länge von length(ItemsInfo) zurück und zwar 172, aber wie ich schon sagte unter 32Bit nur 160.
Bei solchen gravierenden Fehlern sucht man sich blöde.