dll: parameterübergabe: array statt string

mfk

Grünschnabel
Ich bin Delphi-Neuling und habe folgendes Problem:

Ich habe mit Delphi7 Pers. ein Programm erstellt, welches über Funktionen
in einer selbstgemachten DLL allerlei Systeminformationen
zusammensammelt und auf dem Bildschirm und per Mail
ausgeben soll..

Normalerweise habe ich die Übergabe der Parameter/Results über
feste Array[0..MAX] of char erledigt, die als PChar übergeben werden.
Das funktioniert so weit auch ganz gut, jedoch möchte ich jetzt als
Results auch viel längere Zeichenfolgen, nach Art: blablabla#13#10blablabla#13#10etcpp
übergeben...

Ich habe in meinem Hauptprogramm einen

type ImpoExpo : array of char;

festgelegt,
um die Länge dynamisch festlegen zu können, und einen Ergebnistyp von

: ImpoExpo;

von den Funktionen zurückzubekommen zu können.

Das funktioniert auch, die Arrays werden mit den noetigen Strings innerhalb
der Funktionen entsprechend gefüllt und auch ordentlich als Result übergeben.

Jetzt möchte ich die betroffenen Funktionen aber in die DLL auslagern, und
weiss nicht, wie ich z.B. den Typ ImpoExpo in meiner DLL unterbringen kann,
oder wie ich ansonsten Zeichenfolgen >256 ohne die Verwendung von Strings übergeben kann.
(Temp-Datei?, Zeigerübergabe auf erste Adresse?, ich habe keine Ahnung...)
BITTE um HILFE

Vielen Dank im Voraus.
Kai
 
Verwende als Typ PChar (das ist nichts anderes als ein Pointer...)
Ggf. kannst du als zuästzlichen Parameter einen integer mitgeben, der die Länge deines Puffers (=Arraygröße = Anzahl Zeichen)
mit liefert.
Je nachdem wo der Puffer gefüllt wird sollte dann die Länge bestimmt werden

vop
 
Vielen Dank für die schnelle Hilfe!

Klappt denn das auch zuverlässig mit Zeichenfolgen über 256 Zeichen?

Ich habe jetzt als Rückgabe PChar und übergebe diesem die Startadresse des gefüllten Puffers.
Auch bei einem Test mit >600 Zeichen gab es keine Probleme,
aber mal ne dumme Frage:
Wird der Speicherbereich denn zwischendurch geschützt (ich übergeb ja nur eine Adresse und greife nachher auf den hoffentlich identischen Speicherinhalt zu) oder könnte da was in der Zwischenzeit im Speicher verändert werden)?
 
Zuletzt bearbeitet:
Also 1. das klappt mit problemlos auch mit Text > 256 Zeichen, sofern der Puffer dafür groß genug ist.

2. Der Speicherbereich ist für die Anwendung reserviert. Sofern Du nicht selbst (also dein Programm) (versehentlich) etwas drin änderst (weil du bspw. Puffergrößen falsch verwendet hast), gibt es keine Probleme.

P.S.

Sorry für die Reaktionszeit, war im Urlaub (offline = echter Urlaub!)

vop
 
Original geschrieben von vop
Sofern Du nicht selbst (also dein Programm) (versehentlich) etwas drin änderst (weil du bspw. Puffergrößen falsch verwendet hast), gibt es keine Probleme.

BINGO,
ich habe mir jetzt, auf Deine neue Antwort hin, meinen Quelltext nochmal genauer angeschaut, und siehe da:

Die Puffer und die Übergaben waren in Ordnung, aber zwischendrin hatte ich vergessen eine Exception abzufangen. Da die Exception immer erst (mehr oder weniger zufällig) in sehr grossen Puffern zugeschlagen hat, suchte ich den Fehler einfach an der falschen Stelle.

Ich danke Dir, Du hast mir echt weitergeholfen,
Gruss,
Kai
 

Neue Beiträge

Zurück