![]() |
Interface Problem
Hallo Leute,
ich habe folgendes Problem: Eine eine von mir geschriebene (mit Hilfe der JCL ;)) Listenklasse kann das:
Delphi-Quellcode:
Im Hauptprogramm ergibt sich folgende Situation:function TSetList.GetSets(): ISetArray; var Iter: IJclIterator; begin Result := TSetArray.Create(DefaultContainerCapacity, False); Iter := FMap.Values.First(); while Iter.HasNext do Result.Add(Iter.Next()); end; ISetArray = interface(IJclList) end; TSetArray = class(TJclArrayList, ISetArray) protected function CreateEmptyContainer: TJclAbstractContainerBase; override; end;
Delphi-Quellcode:
Wenn ich die Zeile mit Funktion "Something2" weglasse, passiert nichts. Hat jemand eine Idee woran das liegen kann?
procedure Something1();
function Something2(): string; var Set2: TSetType; // Verträglich mit ISetArray/TSetArray... begin for Set2 in SetList.GetSets() do begin //... end; end; var somestring: string; Set1: TSetType; begin //[...] for Set1 in SetList.GetSets() do begin //[...] somestring := Something2(); end; //[...] end; // Something1 end und hier knallts (EAccesViolation in der Unit "System" in der Methode "@IntfClear" Scheint ja irgendwas beim Aufräumen des Methoden-Stacks oder so nicht ganz glatt zu laufen. Danke schon mal im Voraus! |
AW: Interface Problem
Keiner eine Idee? Braucht es noch mehr Informationen?
|
AW: Interface Problem
Am Besten du erstellst davon ein kleines Demo Projekt und stellst uns hier den Quellcode zur Verfügung.
Mit Interfaces kann das ganz schnell wigelich werden, weil der Debgugger da einem auch nicht mehr so zur Seite steht. Es scheint aber, als würde sich eine Interface Instanz freigeben wollen, die jedoch schon zuvor freigeben wurde (so als ob man zwei mal .Free() ) aufruft. |
AW: Interface Problem
Zitat:
Delphi-Quellcode:
Das entspricht:
for Set1 in SetList.GetSets() do
begin //[...] somestring := Something2(); end;
Delphi-Quellcode:
Wenn man die innere Schleife weglässt tritt der Fehler nicht auf. Das könnte bedeuten, dass gerade diese Verschachtelung mit dem zweimaligen Aufruf von GetSets() damit zu tun hat. Nur warum?
for Set1 in SetList.GetSets() do
begin //[...] for Set2 in SetList.GetSets() do begin //... end; end; Wenn diese Überlegung nichts hilft, dann erstelle ich gerne ein Beispiel-Projekt. Ich weiß nur nicht, ob das hilft, weil ich JCL-Komponenten benutzte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 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-2025 by Thomas Breitkreuz