![]() |
Delphi-Version: 2005
Dynamisches Array als Rückgabewert von function ?
Hi,
ich mlchte eine function mit einem Array als Rückgabewert nutzen:
Delphi-Quellcode:
TFilteredLinksArray ist als type TFilteredLinksArray = array of string deklariert.
function GiveMeTheArray(text: string): TFilteredLinksArray; stdcall;
var i: integer; text_list: TStringList; begin text_list := TStringList.Create; GetText(text_list); SetLength(Result, text_list.Count - 1); for i := 0 to text_list.Count - 1 do Result[i] := text_list.Strings[i]; text_list.Free; end; Wenn ich die function nun aufrufe, gibt es den Fehler "Invalid Pointer Operation". Dieser tritt an dieser Stelle auf Result[i] := text_list.Strings[i]; was stimmt da nicht ? Mfg Yannic |
AW: Dynamisches Array als Rückgabewert von function ?
Zitat:
|
AW: Dynamisches Array als Rückgabewert von function ?
Immer diese blöde -1. Danke für den Hinweis und sorry für die dumme Frage ;)
Mfg Yannic |
AW: Dynamisches Array als Rückgabewert von function ?
"Dumm" ist halt das der Index als Offset genommen wird, also Startadresse + Index * Feldgröße. Deshalb hat der erste Eintrag den Index 0
|
AW: Dynamisches Array als Rückgabewert von function ?
Zitat:
Mit TStrings lässt sich einfach viel mehr anfangen als mit einem array of string. |
AW: Dynamisches Array als Rückgabewert von function ?
Hi,
an TStrings hatte ich garnicht gedacht. TStringlist wollte ich nicht nehmen, da die function in einer Dll steckt, und die Plugins sollen unabhängig von Delphi geschrieben werden können. Mfg Yannic |
AW: Dynamisches Array als Rückgabewert von function ?
Das hatte ich schon befürchtet ... RTTI und DLL verträgt sich nicht wirklich.
DLL und EXE nutzen ihre eigene RTTI und standardmäßig auch noch einen eigenen Speichermanager (abgesehn man nutzt dat Thema SharedMemoryManager). Heißt also es ist eigentlich nicht möglich Klassen und auch dynamisches Arrays zwischen DLLs und/oder einer EXE zu übergeben (gemeinsam zu nutzen). |
AW: Dynamisches Array als Rückgabewert von function ?
Hi,
wenn ich nun annehme das du Plugins alle mit Delphi geschrieben werden. Wie gehe ich das ganze dann am schlausten an ? Reicht es einfach die FastMM Units einzubinden ? Wenn ja auf welcher Seite ? Dll, Exe oder beide ? Mfg Yannic |
AW: Dynamisches Array als Rückgabewert von function ?
Für den Speichermanager reicht FastMM,
aber für die RTTI nicht. Bei der RTTI wäre es in diesem Array-Fall wichtig, daß EXE und DLLs möglichst mit der selbem Delphi-/Compilerversion und auch noch möglichst mit den selbem Projekt-/Compileroptionen compiliert sind. Besser kommst du mit Interfaces und Array-Property (das sind keine Arrays, auch wenn die so klingen), was auch den Vorteil hat, daß die Plugins nicht drauf beschrenkt sind, daß sie unbedingt in Delphi geschrieben werden. Dann noch WideString für alle Strings und sonst keine Klassen und dynamischen Arrays verwenden und du bist ganz sicher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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