Hallo,
ja damit komme ich einen Schritt weiter:
Leider ist das mit IEnumerator echt nicht so schön, da du GetCurrent mit unterschiedlichen Rückgabewerten brauchst. Overload geht nicht, da beide keine Parameter haben. Du musst daher eine der Methoden anders nennen und umleiten. Das funktioniert so:
Delphi-Quellcode:
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
function GetCurrent: TObject;
function MoveNext: Boolean;
procedure Reset;
function IEnumerator<TProductTreeItem>.GetCurrent = GetCurrentT;
function GetCurrentT: TProductTreeItem;
Aber: wenn ich jetzt irgendwo sowas tun will:
Delphi-Quellcode:
TMyClass.DoSomething(ProductData : IEnumerator<TProductTreeItem>;);
begin
for var TreeItem in ProductData do
;
end;
Dann meckert der Compiler:
[dcc32 Fehler] ProductManagerTreeDisplay.pas(139): E2431 for-in-Anweisung arbeitet nicht mit Kollektionstyp 'System.IEnumerator<ProductTreeItem.TProductTreeIt em>', weil 'System.IEnumerator<ProductTreeItem.TProductTreeIt em>' kein Element für 'GetEnumerator' enthält oder darauf nicht zugegriffen werden kann
Nur hab' ich noch nicht kapiert wie ich GetEnumerator umsetzen muss. Alle Versuche bisher scheiterten.
z. B. sowas hier:
Delphi-Quellcode:
function GetEnumerator: IEnumerator<TProductTreeItem>;
function IEnumerator<TProductTreeItem>.GetEnumerator = GetEnumeratorT;
function GetEnumeratorT: IEnumerator<TProductTreeItem>;