Wie wäre es in ein Pascal Grundlagenbuch zu gucken und vielleicht sogar ein paar Seiten zu lesen?mtbf40 hat geschrieben: gibt es eine Möglichkeit auf die Variablen in der Funktion zurück zugreifen?

Wie wäre es in ein Pascal Grundlagenbuch zu gucken und vielleicht sogar ein paar Seiten zu lesen?mtbf40 hat geschrieben: gibt es eine Möglichkeit auf die Variablen in der Funktion zurück zugreifen?
Code: Alles auswählen
type // weit oben
meinrecord = record
Count:integer;
output:integer;
Code: Alles auswählen
function Test(pfad:string):meinrecord
Code: Alles auswählen
Procedure Test(pfad:string; var {DAS VAR BEDEUTED DAS DER WERT ÜBERNOMMEN WIRD...) count,output:integer);
begin
//machwas
count := 2;
output := 3;
end;
Code: Alles auswählen
var
a,b
begin
Test('Hallo',a,b);
// jetzt steht in a und b die verte die in der procedure an count und output gegeben werden, also hier im fall 2 und 3
Code: Alles auswählen
Signatur := nil;
das sind selbst geschriebene CLI-Programme - keine Systemprogramme - die fragen Datenbanken ab und geben das Ergebnis auf der Kommanozeile aus.MAC hat geschrieben:ja mir fallen gerade 3 Möglichkeiten ein wie du das realisieren kannst.
Schreib allerdings mal wieso du 2 Externe Programme aufrufen musst.
Ich glaub das lässt sich auch in dein Programm einbauen so das du nicht externe Programme starten musst...
habe ich ausprobiert und folgenden Fehler erhalten:2. Möglichkeit
Du machst eine Funktion raus und gibst einen record zurück
Code: Alles auswählen
function get_process_outp(aufruf: AnsiString): AnsiString;
var
proc : TProcess;
otp : TStringList;
begin
otp := TStringList.Create;
proc := TProcess.Create(nil);
proc.CommandLine := mapper_D+aufruf;
proc.Options := proc.Options + [poWaitOnExit, poUsePipes];
proc.Execute;
get_process_outp := otp.LoadFromStream(proc.Output);
//Fehlermeldung hier bei opt. - wenn ich <get_process_outp :=> weglasse gibt es keinen Fehler - es wird aber auch nichts übergeben
proc.Free;
end;
Code: Alles auswählen
AStringList.Add(get_process_outp(par));
habe ich ausprobiert - funktioniert3. Möglichkeit
var-Parameter in Procedure
Danke für den Tip!!mse hat geschrieben:Wie wäre es in ein Pascal Grundlagenbuch zu gucken und vielleicht sogar ein paar Seiten zu lesen?mtbf40 hat geschrieben: gibt es eine Möglichkeit auf die Variablen in der Funktion zurück zugreifen?
das ist richtig - die DLL soll in MT4 eingebunden werden. Das ganze funktioniert ja soweit - beim Aufruf des mql-Skriptes (in MT4) wird die Prozedur in der DLL aufgerufen und diese legt dann die Datei an - schreibt aber nur 0x20 Zeichen rein und das tonnenweise. Ich habe keinen blassen Schimmer warum. Habe das ganze mal mit dem PE Monitor (Sysinternals) verfolgt - da sieht man wie die Zeichen in nano-Sekunden reinschießen. Ich muß dann MT4 schließen um nicht meinen Server lahm zu legen.af0815 hat geschrieben:Laut der Beschreibung hier ist das Interface im C++ Style. Ich nehme an, das der MT4 die Applikation ist, in die die dll (zukünftig mit Pascal erstellt) eingebunden werden soll.
Habe ich das soweit richtig verstanden ?
...ja macht Sinn dafür einen neuen Thread zu eröffnen...af0815 hat geschrieben:Schaut so aus, als wäre das Interface nicht 100% pro kompatibel programmiert. Kannst du die Interfacedefinition (von MT4 und von Lazarus) mal hier reinstellen. Ausserdem wäre ein neuer Thread mit der richtigen Überschrift sinvoll.
Code: Alles auswählen
// vlt sowas ?
while True do
begin
Form1.Caption := 'Hallo' + InttoStr(random(19999));
Application.ProcessMessages;
if random(1000000) = 0 then exit;
sleep(100);
end;
Code: Alles auswählen
Signatur := nil;
mit endlos ist das Programm gemeint - d.h. es wird gestartet und "irgend wann" beendet - es könnte Wochen oder Monate offen sein - bis es jemand beendet oder bei einem reboot - das ist der Grund für den Timermtbf40 hat geschrieben:
2. Start - läuft endlos - reboot - Start - läuft endlos - reboot ...