Funktion auslagern

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Funktion auslagern

Beitrag von Alfred »

Hallo,

wie kann man unter Alaska eigene Funktionen und Prozeduren aus-
lagern, so dass sie erst beim compilieren eingebunden werden?

Gruß
Alfred
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Alfred,

wie stellst Du Dir das vor? Einfach nur eigene prg? Oder als dll? Lib geht natürlich auch.

Kannst Du da näheres sagen, woran Du da denkst?

Jan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Funktion auslagern

Beitrag von AUGE_OHR »

hi,
Alfred hat geschrieben: wie kann man unter Alaska eigene Funktionen und Prozeduren aus-
lagern, so dass sie erst beim compilieren eingebunden werden?
meinst du wirklich "beim compilieren" ? man könnte per #include weiter
*.PRG einbinden.

oder meinst du "zur Laufzeit", also z.b. datadriven aus *.DBF ?
dafür nimmt man Codeblock und EVAL().

gruss by OHR
Jimmy
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Jan,
Hallo Jimmy,

mein erstes Programm sieht derzeit so aus

PROZEDURE MAIN()
RETURN

PROZEDURE APPSYS()
RETURN

PROZEDURE einfuegen()
RETURN

Derzeit sind schon eine Anzahl an eigenen Prozeduren hinzugekommen.

Für die Fehlersuche wäre es praktisch wenn ich in einem ersten
Schritt meine eigenen Prozeduren aus dem Hauptprogramm heraus-
nehmen könnte. Wobei diese Prozduren noch nicht so programmiert
sind dass sie losgelöst von dem Programm verwendet werden können.

Der 2. Schritt wäre dann die Prozeduren allgemein verwendbar zu
machen(z.B. meinen eigenen Insert()).

Gruß
Alfred
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Alfred,

wenn ich Dich richtig verstehe möchtest/musst Du Deine Funktionen und Prozeduren in verschiedene prg unterbringen. Was absolut löblich und korrekt ist. Und irgendwann auch schlichtweg unvermeidbar. Lese Dich doch mal in PBuild ein, das dürfte die Lösung für Dein Problem sein. oder Du arbeitest mit VX. Das macht in diesem Bereich zwar das gleiche, ist aber hierbei einfacher zu bedienen.

Jan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
Alfred hat geschrieben: Für die Fehlersuche wäre es praktisch wenn ich in einem ersten
Schritt meine eigenen Prozeduren aus dem Hauptprogramm heraus-
nehmen könnte. Wobei diese Prozduren noch nicht so programmiert
sind dass sie losgelöst von dem Programm verwendet werden können.
aha, jetzt kommen wir der Sache näher. Also so mache ich es :
1.) Masken in Formdesigner erstellen und Code generieren.
2.) in der "Nutzerebene" vor der Procedure Main ein #define/#IFDEF

Code: Alles auswählen

#define TEST   .T.
#IFDEF TEST
PROCEDURE APPSYS
RETURN
PROCEDURE MAIN()
...
#ENDDEF
3.) compilieren mit XPP -DTEST myProg.PRG -b
4.) wenn das alles so klappt musst du nur "#define TEST .T." wieder raus-
nehmen und das ganze in dein Haupt *.XPJ einbauen.

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Alfred,

ich schreibe mal wie ich es mache.

Ich habe mir vor Jahren eine Umgebung (etwa 20 PRG) gebaut, die ich
für jedes neue Projekt in ein neues Verzeichnis kopiere.

Mit diesem PRG Skelett fange ich dann immer an.
Einige dieser Dateien enthalten programmspeziefische Teile. Diese werden
nie wieder überschrieben, sondern nur im Verzeichnis editiert.
Andere Dateien (meine allgemeinen Funktionen, Prozeduren, Klassen, HBPrinterX Bibliothek) werden nicht in dem Verzeichnis gepflegt, da dort
nur allgemeingültige Sachen drinstehen. Mit einer CMD Datei überschreibe ich ab und an diese Dateien mit denen, die im
Masterverzeichnis liegen. So kann ich allgemeine Funktionen für alle
verbessern und muss nur die CMD aufrufen (die löscht auch alle OBJ
Dateien und die alte EXE) und neu kompilieren.

Einzelne PRG Dateien sollten nicht mehr als einige hundert Zeilen enthalten, nur eigene Klassen müssen jeweils in einer eigenen Datei
stehen (sehr kurze Klassen kann man auch in einer Datei zusammenfassen).

Die Überwachung übernimmt PBUILD !

Die jeweiligen PRGs muss man nur sauber in der Projektdatei einbinden,
wobei man keine Unterverzeichnisse verwenden darf, da der Linker sonst durcheinander kommt.

Eigene Funktionen könnte man natürlich auch in DLL auslagern, aber dann muss man strikte Versionsplanungen dieser DLLs einhalten. Das gebe ich mir nicht. :wink: Rentiert sich auch nur, wenn viele EXE auf einem PC laufen, die alle diese DLL benutzen können und somit der Code nicht in jeder EXE liegt, sondern nur einmal in der DLL.

Verabschieden muss man sich von dem alten LIB Befehl, falls man das verwendet hat um OBJ in LIBs auszulagern. Das Konzept ist unter Windows nicht mehr uptodate :wink: und auch nicht wirklich praktikabel, selbst mit einem betagten 1 Ghz Rechner ist pbuild so schnell, dass man ruhig alles (geänderte) kompilieren kann.
Gruß
Hubert
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Hubert,

vielen Dank für die ausführliche Erläuterung.

Meine erste Testanwendung mit externer Prozedur läuft schon perfekt

Gruß
Alfred
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Alfred,

ich mache es ähnlich wie Hubert. Entsprechende Berechnungsfunktionen
mache ich eigene PRG und binde diese in die xpj.Datei ein. Dieses vereinfacht auch die Fehlersuche.

Hierbei nutze ich auch den Vorteil, daß man mit der xpj-Datei mehrere
exe-files kompilieren kann. Dies mache ich dann, wenn aus diversen Menüpunkten oftmals die gleichen DBF und die gleichen Funktionen benötigt werden.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Antworten