Wie eigene LIB-Datei ersetzen bzw. erstellen

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
Torsten.E
Rookie
Rookie
Beiträge: 2
Registriert: Mi, 22. Aug 2012 10:37

Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitrag von Torsten.E »

Hallo,

ich habe eine Clipper-Library aus ca. 90 PRG-Files. Diese LIB-Datei kann ich
ja nicht mehr in xBase einbinden.

Jetzt möchte ich hierfür eine neue LIB-Datei DLL-Datei, was auch immer
erstellen. Der Source-Code der 90 PRG-Files ist vorhanden.

Wie erstelle ich eine neue LIB-Datei ?

Torsten.E
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:

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitrag von Jan »

Hallo Torsten,

schau Dir dazu mal die Compiler-Schalter an. Du kannst darüber steuern, eine statische oder dynamicsche DLL anzulegen. Du kannst auch in einer gemeinsamen Projektdatei die exe und dazugehörige DLL verwalten.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Torsten.E
Rookie
Rookie
Beiträge: 2
Registriert: Mi, 22. Aug 2012 10:37

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitrag von Torsten.E »

Hey Jan,

danke für die schnelle Antwort.
Habe mir die Schalter schnell angesehen, werde aber daraus nicht ganz schlau.

In einem Verzeichnis liegen ca. 90 Dateien: BS01.PRG, BS02.PRG ... BS90.PRG
Diese Dateien waren früher in diesem Verzeichnis zu BS.LIB erstellt.

(syntatisch ähnlicher Batch-Code zum Erstellen der BS.LIB)

Code: Alles auswählen

...
CLIPPER bs01 /M/N/W
LIB bs +bs01;;
...

Jetzt habe ich ein PROJECT.XPJ

Dort möchte ich natürlich jetzt nicht die 90 Dateien alle auflisten, ist ja auch Blödsinn,
dort sollte praktisch nur die BS.DLL mit eingebunden werden.

D.h. wir erstelle ich die BS.DLL (in dem extra Verzeichnis nur mit den 90 Dateien) und wie binde ich diese in der PROJECT.XPJ ein ?
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitrag von georg »

Hallo, Torsten -


das sollte dann so aussehen:

Code: Alles auswählen

[PROJECT.XPJ]
meinpgm.exe
meinedll.dll

[meinpgm.exe]
meinpgm.prg
meindies.prg
meindas.prg

[meinedll.dll]
bs01.prg
bs02.prg
...
bs90.prg
Du kommst nicht umhin, alle PRGs aufzulisten.

Nachdem Du die project.xpj fertig hast, einmal pbuild /g aufrufen, und dann pbuild.

Dann gibt es da noch so eine Besonderheit, dass alle externen Referenzen (Function Calls etc.) entweder in der DLL selbst definiert sein müssen, bzw. in den Runtime Libraries von Xbase vorkommen müssen.

Wenn meinedll.dll also eine Funktion aus meindies.prg aufruft, geht das erst mal nicht, weil der Linker die Referenz innerhalb der DLL nicht auflösen kann. Man kann diesen Konflikt jedoch lösen, indem man die Funktion über einen Codeblock zur Laufzeit anspricht:

Code: Alles auswählen

bBlock := "{|p1, p2, p3| MeineFunktion(p1, p2, p3)}"
bBlock := &bBlock
nErgebnis := Eval(bBlock, param1, param2, param3)

Alternativ kannst Du natürlich auch ein separates Verzeichnis für die DLL anlegen, dort eine eigene project.xpj anlegen. Mit "dir /b *.prg > ausgabe.txt" bekommst Du auch recht schnell eine editierfähige Liste der zur DLL gehörenden Dateien.

In Deinem Programm gibst Du dann über die Anweisung

Code: Alles auswählen

#PRAGMA Library("MeineDLL.DLL")
dem Linker die Anweisung, die DLL einzubinden.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitrag von brandelh »

Xbase++ DLLs und statische LIBs müssen aber immer mit der gleichen Version erstellt worden sein (runtime dlls etc.),
ich binde direkt die PRGs (also source code bibliothek) ein. Dabei muss man aktuell die PRGs alle im Programmverzeichnis vorhalten.
Das mache ich mit einer Batch die aus einem Entwicklungsverzeichnis die PRG herüberkopiert.
Gruß
Hubert
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: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitrag von AUGE_OHR »

Torsten.E hat geschrieben:Jetzt möchte ich hierfür eine neue LIB-Datei DLL-Datei, was auch immer
erstellen. Der Source-Code der 90 PRG-Files ist vorhanden.

Wie erstelle ich eine neue LIB-Datei ?
1.) alle LIB PRG in einen Ordner kopieren
2.) DIR *.PRG /B > PROJECT.TXT
3.) PBUILD @PROJECT.TXT
4.) PBUILD PROJECT.XPJ -g
5.) jetzt die PROJECT.XPJ editieren und folgendes eintragen.

Code: Alles auswählen

// wird dann automatisch angelegt
OBJ_DIR       = .\OBJ

[PROJECT.XPJ]
    deine.DLL

[deine.DLL]
// für die DLL
    COMPILE_FLAGS = /dll /n /q /w /o\OBJ\ 
// $START-AUTODEPEND
    bs01..OBJ
    ...
    bs90.obj 
// $STOP-AUTODEPEND
    bs01.prg
    ...
    bs90.prg
damit "sollte" er dir dann deine.LIB, deine.DLL und deine.DEF erzeugen.
da du Cl*pper Code verwendest musst du überlegen ob in deiner LIB noch "Text Eingaben / Ausgaben" sind den dann muss GUI = NO in das Project.XPJ

Tip : "Pbuild Project.XPJ > Logfile.TXT"
gruss by OHR
Jimmy
Antworten