![]() |
Dll und record, bzw. array
Es wurde schon mehrmals besprochen, aber richtige Lösung konnte ich trotzdem nicht finden. In meiner funktion ist Übergabeparameter ein record, aber man kann auch 2 Arrays benutzen, einer of String, anderer of Integer. Ich habe es gelesen, dass statt String soll pchar benutzen, aber was ist mit arrray?
|
Re: Dll und record, bzw. array
Am besten lässt sich eine solche Übergabe immer über einen Pointer realisieren. Dann kannst du sogar ein beliebiges Objekt (z.B. Class(TObject)) übergeben.
Vorgehensweise: - Object/Record/String in der Dll einem Speicherbereich zuweisen (new) - mit Daten füllen - und den Pointer an die Anwendung übergeben - dort wird dein Object/Record/String dann dereferenziert - nicht vergessen den Speicherbereich zu gegebenen Zeitpunkt wieder freizugeben. Wie das im einzelen Funktioniert solltest du mit den richtigen Suchbegriffen finden, wenn nicht, dann frag mich nochmal, wenn ich die Zeit finde kann ich dir ein Beispielprojekt schicken... |
Re: Dll und record, bzw. array
Ein Beispielprojekt, das klingt ganz super, hoffe, dass du Zeit findest. :-D
|
Re: Dll und record, bzw. array
Hilfe brauche ich immer noch :gruebel:
|
Re: Dll und record, bzw. array
Hi...
Du kannst Array of String und Array of integer benutzen. Dafür musst du Sharemem benutzen. Wie das geht findest du in diversen Abhandlingen. Empfehlen kann ich dir allerdings das Borland Sharemem durch freie Software zu ersetzen, weil es doch bugs gibt. Google mal nach ![]() ![]() [edit] Das bedeutet aber natürlich, dass du die DLL nur mit einem Delphi-Programm auslesen/ansprechen kannst, dass auch FastShareMem benutzt. Ob es ein Ponton für andere Hochsprachen gibt weiss ich leider nicht [/edit] hoffe ich konnte helfen. MfG Tonic |
Re: Dll und record, bzw. array
[quote="Tonic1024"]Empfehlen kann ich dir allerdings das Borland Sharemem durch freie Software zu ersetzen, weil es doch bugs gibt.[/url]
Und die wären? |
Re: Dll und record, bzw. array
Zitat:
Und noch eine Frage, wenn ich doch ShareMem von Borland nehme, kann ich auf meine Dll mit anderen Programmierspachen zugreifen oder auch nur mit Delphi? |
Re: Dll und record, bzw. array
Hi...
Ist zu lange her... kann ich nicht mehr mit Gewissheit sagen... Fakt ist, dass ich mich zu der Zeit gezwungen sah für meine DLL, in der ich ein dreidimensionales Array of String berechnen lassen musste, einen anderen Weg zu suchen. Und da habe ich in der DP (oder wars die Delphi-Source?!?) eine Referenz von FastShareMem gefunden, die mein Problem gelöst hat. Wenn du ein bissel googelst wirst du auf der Seite vom FastShareMem bestimmt jede Menge Infos zu dieser Kompo finden. War glaub ich umfangreich Textmaterial mit Features und History dabei. [edit] Dynamische Array benutze ich auch - kein Rroblem. Du solltest nur eine Unit erstellen, in denen du einen Typ deklarierst: Array of String. Diese Unit dann in alle Projekte einbinden. Damit stellst du sicher, das die Typen nur an einer Stelle im Code stehen und ggf. Änderungen globale gültigkeit haben. IMO sollten records dann auch kein Problem sein, habe ich aber nicht getestet.[/edit] MfG Tonic |
Re: Dll und record, bzw. array
Zitat:
|
Re: Dll und record, bzw. array
Liste der Anhänge anzeigen (Anzahl: 1)
Besser spät als nie, oder wie war das?
Ich habe eine mal ein Beispiel erstellt, dass zeigt, wie man Stringdaten in Records bzw Objekten mit Hilfe von Pointern und OHNE Sharemem o.ä. zwischen Anwendung und Dll austauscht. Vorteil gebenüber Sharemem: Die Dll kann auch von einer C++ Anwendung u.ä. genutzt werden. Das Beispiel lässt sich natürlich beliebig erweitern, sodass man auch noch Arrays hinzufügen kann. (Ich habe das unter Delphi7 Pro geschrieben, sollte aber auch auf anderen Versionen laufen) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 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