Wie eigene LIB-Datei ersetzen bzw. erstellen

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

Moderator: Moderatoren

Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitragvon Torsten.E » Mi, 22. Aug 2012 9:44

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
Torsten.E
Rookie
Rookie
 
Beiträge: 2
Registriert: Mi, 22. Aug 2012 9:37

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitragvon Jan » Mi, 22. Aug 2012 9:48

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11449
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitragvon Torsten.E » Mi, 22. Aug 2012 10:03

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 ?
Torsten.E
Rookie
Rookie
 
Beiträge: 2
Registriert: Mi, 22. Aug 2012 9:37

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitragvon georg » Mi, 22. Aug 2012 10:29

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1748
Registriert: Fr, 08. Feb 2008 21:29

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitragvon brandelh » Mi, 22. Aug 2012 19:42

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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13197
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Wie eigene LIB-Datei ersetzen bzw. erstellen

Beitragvon AUGE_OHR » Mi, 22. Aug 2012 22:13

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10057
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg


Zurück zu Migration

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast