Delphi LIB/DLL in Xbase++

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Delphi LIB/DLL in Xbase++

Beitrag von JanR »

Hallo,

habe eine Delphi DLL/LIB mit Funktionen die ich gerne in Xbase++ verwenden möchte. Der Zugriff über die DLL geht ohne Probleme, aber das geht leider immer nur über DllLoad() und DllCall(). Ich würde die Funktionen gerne ganz normal aufrufen, ohne erst die DLL zu laden, also über die LIB. Das funktioniert aber irgendwie nicht. Habe die LIB mit pragma library eingebungen, aber beim linken sagt er mir "unresolved symbol". Geht das garnicht oder was mache ich falsch?

Vielen Dank

Gruß Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15699
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 68 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Delphi LIB/DLL in Xbase++

Beitrag von brandelh »

Hi,

DllLoad() etc. ist der elegante Weg, weil man alles schön steuern kann.

Bequemer ist DLLFUNCTION() -> Handbuch ;-)

Auf jeden Fall musst du einmalig im PRG Code die externen Funktionen per DLLFUNCTION referenzieren,
danach kannst du sie normal benutzen.
Gruß
Hubert
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Re: Delphi LIB/DLL in Xbase++

Beitrag von JanR »

Hi Hubert,

da hast du schon recht, dass es eleganter ist, aber ich möchte dieses Gerüst eigentlich nicht haben. Also anstatt

nHandle := DllLoad("hubert.dll")
DllCall(nHandle, DLL_STDCALL, "test", 1)

möchte ich das einfach so machen

#pragma library("hubert.lib")
test(1)

Also die Funktionen nach Einbindung der LIB einfach so wie ganz normale Xbase Funktionen benutzen.


Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15699
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 68 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Delphi LIB/DLL in Xbase++

Beitrag von brandelh »

Hi,

du musst auf jeden Fall jede Funktion per DLLFUNCTION zuerst dem XBase++ System bekannt geben.
Diese könntest du natürlich dann in eine XYZ-DLL.CH schreiben und includen ;-)
Gruß
Hubert
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Re: Delphi LIB/DLL in Xbase++

Beitrag von JanR »

Hi Hubert,

vielen Dank. Das klappt sogar :coffee: .

Geht das auch mit Klassen?
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15699
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 68 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Delphi LIB/DLL in Xbase++

Beitrag von brandelh »

JanR hat geschrieben:Geht das auch mit Klassen?
Was meinst du jetzt damit ?

Delphi Klassen ?

Ich habe keine Ahnung, sorry :wink:
Gruß
Hubert
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Re: Delphi LIB/DLL in Xbase++

Beitrag von JanR »

Genau, mit Klassen in einer DLL. Mit Funktionen geht es ja problemlos.
Juergen
UDF-Programmierer
UDF-Programmierer
Beiträge: 92
Registriert: Di, 19. Dez 2006 19:37
Wohnort: Düsseldorf
Kontaktdaten:

Re: Delphi LIB/DLL in Xbase++

Beitrag von Juergen »

Hallo JanR,

lade Dir mal die Demo 'Fast Report for Xbase' von Sergey Spirin
http://www.paritetsoft.ru/frax.htm herunter.

Ein sehr guter Reportgenerator und viele Beispiele von DLL-Aufrufen
aus Xbase heraus.

Gruß
Jürgen
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Delphi LIB/DLL in Xbase++

Beitrag von Lewi »

Der Hinweis auf FRAX in Hinblick auf die Einbindung einer Delphi-DLL ist ein guter Hinweis. FRAX selbst ist eine DLL, die unter Delphi entwickelt wird. Die Aufrufe von Klassen, Methoden und Klassen-Acsess-Variablen erfolgt über xBase++ Warper Funktionen, die wiederum an an die DLL weitegeleitet werden.

Gruß, Olaf
Antworten