[ gelöst] Unterprogramm aufrufen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
michaschwartz
Beiträge: 14
Registriert: Do 22. Mai 2014, 13:03

[ gelöst] Unterprogramm aufrufen

Beitrag von michaschwartz »

Hallo,

(Lazarusversion 1.2.4, Windows7 64bit)
ich habe eine Problem beim Aufruf von Unterprogrammen:
Zum Testen habe ich zwei Miniprogramme erzeugt. Programm1 enthält in der Uses-Klausel Programm2, Programm2 unter implemantatation eine usesklausel zu Programm1.
Programm1 hat einen Button, der per "form2.show" die Maske des zweiten Programms aufrufen soll. Die aufzurufende Maske ist ansonsten vollkommen leer.
Dabei lauf ich reproduzierbar immer auf den selben Fehler:
SIGSEV in der Datei /include/customform/inc in Zeile 2138.
und dort steht
procedure TCustomForm.Show;
begin
Visible := True;
BringToFront;
end;
Hat jemand eine Idee, was ich hier falsch mache? Ich stehe hier echt auf dem Schlauch, es sollte doch eigentlich ganz einfach sein.

LG

Michael
Zuletzt geändert von michaschwartz am Mi 8. Okt 2014, 13:35, insgesamt 1-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Unterprogramm aufrufen

Beitrag von m.fuchs »

Zuerst mal verwendest du anscheinend Begriffe falsch. Ich vermute, es handelt sich nicht um Unterprogramme, sondern um Forms.
michaschwartz hat geschrieben:[...] Programm2 unter implemantatation eine usesklausel zu Programm1[...]
Gibt es dafür eigentlich einen Grund?
michaschwartz hat geschrieben:SIGSEV in der Datei /include/customform/inc in Zeile 2138.
Da tippe ich doch mal darauf, dass dein zweites Form nirgendwo erzeugt wurde. Findest du in deiner .lpr-Datei irgendwo die Zeile

Code: Alles auswählen

Application.CreateForm(TForm2, Form2);
?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

michaschwartz
Beiträge: 14
Registriert: Do 22. Mai 2014, 13:03

Re: Unterprogramm aufrufen

Beitrag von michaschwartz »

1) Für die uses-Klausel im Programm2 gibt es in der Tat keinen Grund, die kann ich auch weglassen.
2) Ich bin in den Begrifflichkeiten tatsächlich nicht sicher, ich habe beide Programme per Projekt/Neues Projekt erzeugt und wollte nun, das das erst erste Programm das zweite aufruft. Ich habe das zum Testen soweit wie möglich vereinfacht.
3) die .lpr vom zweiten Programm sieht wie folgt aus:

Code: Alles auswählen

program test2;
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, test2_l
  { you can add units after this };
 
{$R *.res}
 
begin
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
LG.

Michael
Zuletzt geändert von Lori am Mi 1. Okt 2014, 17:39, insgesamt 2-mal geändert.
Grund: Highlighter

Benutzeravatar
theo
Beiträge: 10865
Registriert: Mo 11. Sep 2006, 19:01

Re: Unterprogramm aufrufen

Beitrag von theo »

Was willst du erreichen?
Zwischen zwei Anwendungen muss man anders kommunizieren, aber ich glaube, das willst du gar nicht eigentlich, oder?

michaschwartz
Beiträge: 14
Registriert: Do 22. Mai 2014, 13:03

Re: Unterprogramm aufrufen

Beitrag von michaschwartz »

Eigentlich will ich aus einer Anwendung, die Datenbanksätze verwaltet, auf eine weitere Anwendung zugreifen, die Reports erstellt. Nach dem Erstellen der Reports möchte ich wieder auf die aufrufenden Anwendung zurück verzweigen.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Unterprogramm aufrufen

Beitrag von hde »

und warum um alles in der Welt müssen das 2 Programme sein?

michaschwartz
Beiträge: 14
Registriert: Do 22. Mai 2014, 13:03

Re: Unterprogramm aufrufen

Beitrag von michaschwartz »

Ich hielt mehrere Programme bisher für übersichtlicher, solange diese sich leicht miteinander verbinden lassen. Bin ich hier gänzlich auf dem Holzweg?

Benutzeravatar
theo
Beiträge: 10865
Registriert: Mo 11. Sep 2006, 19:01

Re: Unterprogramm aufrufen

Beitrag von theo »

michaschwartz hat geschrieben:Ich hielt mehrere Programme bisher für übersichtlicher, solange diese sich leicht miteinander verbinden lassen. Bin ich hier gänzlich auf dem Holzweg?
Du kannst schon zwei Anwendungen machen, nur funktionieren die dann autonom.
D.h. eine Kommunikation zwischen beiden funktioniert nicht so, wie du dir das vorstellst, über "uses...", sondern wesentlich komplizierter.
Wenn die Programme nicht eigenständig sein sollen, dann erstelle einfach mehrere Formulare für die versch. Programmteile.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Unterprogramm aufrufen

Beitrag von hde »

michaschwartz hat geschrieben:Bin ich hier gänzlich auf dem Holzweg?
Sry, aber ich denke schon.
Wenn ich dich richtig verstanden habe, soll das eine Programm Daten lesen und das andere davon abhängig Reports erstellen?
Dann gehört das in 1 Programm auf evtl 2 Formulare.

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Unterprogramm aufrufen

Beitrag von diogenes »

Ich fürchte, da herrscht Begriffsverwirrung.

Lincoln-Six-Echo (darf ich LSE sagen?), ein Programm ist im Sinne von Free Pascal aus eienm Hauptmodeul (Schlüsselwort "program") und mehreren statischen Bibliotheken (Schlüsselwort "unit") zusammen gesetzt.

Ein Programm kan durchaus mehrere Formulare (englisch "Forms") enthalten, aber eine Unit nur maximal ein Formular. Eines dieser Formulare (nämlich das erste, das in der .lpr-Datei erzeugt wird) ist das Hauptformular, das vor allem das Programm beendet, wenn es geschlossen wird. Die anderen sind an sich unabhängig, aber sie können miteinander kommunizieren. In einem Formular kannst Du also Dein eines Ding drehen und in einer anderen Deinen Report aufbauen. Die beiden gehörten dann aber zum selben Programm. War es das, was du gemeint hast?
Ceterum censeo computatores per Pascal docendos esse.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Unterprogramm aufrufen

Beitrag von m.fuchs »

diogenes hat geschrieben:[...] aber eine Unit nur maximal ein Formular[...]
Als notorischer Klugsch***er muss ich an dieser STelle widersprechen. Mehr als ein Formular pro Unit ist durchaus möglich, wenn auch sehr unüblich (aus guten Gründen).

Aber tatsächlich bleibt immer noch die Frage an den OP offen: was ist eigentlich gemeint?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Unterprogramm aufrufen

Beitrag von hde »

m.fuchs hat geschrieben:Mehr als ein Formular pro Unit ist durchaus möglich
da hast du Recht. In einer speziellen Anwendung erzeugen wir in einer unit aufgrund von Vorgängen auf einem Formulare dynamisch weitere unterschiedliche Formulare. das hat da seinen guten Grund.
Aber das hat nichts mit der Anfrage hier zu tun. Der OP müsste sich mal äußern was er eigentlich erreichen will und warum er dazu zwei autonome Programme erzeugt. Jedenfalls kann er zwei solcher Programme nicht per uses-Klausel verbinden und ansprechen. Aber das war doch die Ausgangsfrage?

michaschwartz
Beiträge: 14
Registriert: Do 22. Mai 2014, 13:03

Re: Unterprogramm aufrufen

Beitrag von michaschwartz »

Sorry, ich hatte keinen speziellen Grund, mit zwei autonomen Programmen zu arbeiten. Ich hielt es für einfach und normal und habe nun gelernt, daß dem nicht so ist. Danke für eure Hilfe. LG Michael

Antworten