Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Readln und Variant (https://www.delphipraxis.net/70373-readln-und-variant.html)

c113plpbr 29. Mai 2006 15:18


Readln und Variant
 
Hallo dp'ler,

ich versuche gerade ein Programm mit PascalScript auszustatten. Die dort laufenden Scripts sollten nun aber auch aus- und eingaben in einem Konsolenfenster tätigen können. Dazu möchte ich die Funktionen Read, Readln, Write und Writeln zur Verfügung stellen.
Nun, da es mir bisher nicht gelungen ist, einen Pointer auf eine dieser Funktionen zu bekommen, versuche ich das ganze gerade mit callback-funktionen (also so proxy-artig). Soweit kein Problem, aber man kann ja natürlich den Funktionen nicht nur strings übergeben, sondern auch integer-, single-, usw. Variablen übergeben. Zuerst dachte ich, einfach die funktion überladen. Aber bei der "menge" an overloads fängt man dann schon an nach ner anderen methode zu suchen, und mir fiel dann auch der typ/die klasse variant ein.
Bei Writeln funktioniert das auch ganz gut, aber der Compiler akzeptiert bei Readln keine variants, so bekomme ich immer die fehlermeldung:
Fehler
[Pascal Error] psd_main.pas(249): E2055 Illegal type in Read/Readln statement


Nunja ... ich hoffe ihr habt mein Problem verstanden und könnt mir helfen. Aber zum überladen bin ich ehrlich gesagt zu faul ... ;) .

Achja, und zur veranschaulichung noch die Callback-Funktion:
Delphi-Quellcode:
//Funktioniert nicht
procedure TForm1.sfRead(out t: variant);
begin
  Read(t);
end;

//Funktioniert bestens ^^
procedure TForm1.sfWrite(t: variant);
begin
  Write(t);
end;
ciao & thx,
Philipp

mkinzler 29. Mai 2006 15:30

Re: Readln und Variant
 
Versuch mal
1.) Untypisierten out-Parameter.
2.) Ersetze out durch var
3.) Umweg über lokale Variable

c113plpbr 29. Mai 2006 18:47

Re: Readln und Variant
 
Zitat:

Zitat von mkinzler
Versuch mal
1.) Untypisierten out-Parameter.

Hab ich bereits probiert, leider ohne effekt, gleiche fehlermeldung
Zitat:

Zitat von mkinzler
2.) Ersetze out durch var

wie bei 1.)
Zitat:

Zitat von mkinzler
3.) Umweg über lokale Variable

Von welchem typ?
Also mit ner lokalen Variant-variable gehts auch ned ...

ciao,
Philipp

shmia 29. Mai 2006 18:57

Re: Readln und Variant
 
Die Idee mit readln muss wohl scheitern, denn:
Beim "normalen" read/readln wird eine typisierte Variable übergeben.
Die read funktion weiss, welcher Datentyp verlangt wird und reagiert demsprechend.
Durch die Verwendung von Variant als Out-Parameter geht diese Information verloren
und kann auch nicht rekonstruiert werden.

c113plpbr 29. Mai 2006 19:01

Re: Readln und Variant
 
Zitat:

Zitat von shmia
Die Idee mit readln muss wohl scheitern, denn:
Beim "normalen" read/readln wird eine typisierte Variable übergeben.
Die read funktion weiss, welcher Datentyp verlangt wird und reagiert demsprechend.
Durch die Verwendung von Variant als Out-Parameter geht diese Information verloren
und kann auch nicht rekonstruiert werden.

Hmm ... klingt logisch ... meinst du es gibt ne andere "praktische" lösung?

ciao & thx,
Philipp

shmia 29. Mai 2006 19:18

Re: Readln und Variant
 
Man könnte ein COM-Objekt für die Konsole erstellen.
Für .NET gibt es anscheinend schon eine Konsolenklasse.
Es wäre günstig, wenn man die Methoden und Properties gleich wie bei .NET benamsen würde.
Dieses COM-Objekt wäre dann ziemlich vielseitig einsetzbar:
* für Pascalscript
* für VB-Script
* für JavaScript
Wahrscheinlich gibt es schon so eine COM-Klasse irgendwo im Internet; man müsste es nur finden.

c113plpbr 29. Mai 2006 19:29

Re: Readln und Variant
 
Zitat:

Zitat von shmia
Man könnte ein COM-Objekt für die Konsole erstellen.

oO ... davon hab ich absolut keine ahnung ... nun, dann muss ich vermutlich das teil ... ewig oft überladen ... *grml* ... ;)

ciao & thx,
Philipp


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz