Delphi-Komponenten zu FP portieren

Rund um die LCL und andere Komponenten
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Delphi-Komponenten zu FP portieren

Beitrag von mschnell »

Ich möchte ein Programm-Paket von Delphi zu Lazarus portieren.

Es besteht aus eigenem Code (von meinen Kollegen) und einigen 3rd-Party Komponenten, die wir im Sourcecode gekauft haben.

Der gesamte Sourcecode soll so mit "$if"s erweitert werden, dass er sich später wie gehabt in Delphi und zusätzlich in Lazarus übersetzen lässt.

Zum Testen habe ich mir gedacht erst mal mit einer kleinen 3rd-Party Komponente anzufangen. Da habe ich mir "TSpinEdit" aus den mit Delphi gelieferten Beispielen ausgesucht. Der Code steht im Sourcefile Spin.pas.

Natürlich stoße ich sofort beim Übersetzen auf Probleme:


Code: Alles auswählen

procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER;
 
    Fehlermeldung: Identifyer not found für TCMGotFocus und CM_ENTER


Wie kann man sinnvoll vorgehen ?

Gruß und Dank,
-Michael

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

Beitrag von theo »

Also CM_ENTER ist in LMessages definiert. TCMGotFocus weiss ich auch nicht.

Ich fänd's aber besser, wenn man solche Windows-ismen gleich versucht zu elliminieren und OnEnter oder OnFocus verwendet.
Dann läuft's auch gleich z.B. auf Kylix.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Gerne !

Wie stellst Du Dir das vor ?

Da kommen noch jede Menge weitere Windows-ismen, die ich gerne 'rauswerdfen würde. z.B. GetDC, um die Fontgröße zu ermitteln.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Ich sehe gerade, dass SpinEdit eine dumme Wahl war, da Lazarus TSpinEdit ja schon beinhaltet.

Andererseits ist es sicher instruktiv, den Sourcecode von Lazarus und von Delphi 'mal zu vergleichen.

-Michael

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Aber bitte das Urheberrecht von Borland/Codegear beachten!

knight

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

Beitrag von theo »

mschnell hat geschrieben:Wie stellst Du Dir das vor ?


Naja, das muss man halt im Einzelfall ansehen, wie man's ersetzen kann.
Ist vielleicht nicht immer einfach. Aber die fehlenden Deklarationen wie TCMGotFocus musst du ja auch irgendwie ausfindig machen. Und ob das dann Cross-Platform klappt?
Die Font-Dimensionen kannst du z.B. mit Canvas.TextExtent ermitteln.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@mschnell

Ich würde dir empfehlen, für FPC/Laz eine Unit extra zu erstellen, wo du solche Konstanten auf die Entsprechungen ändern kannst, also

const
CM_BlaBla = Laz-Entsprechung;

Bei einigen Sachen wird man zusätzlich noch die Routinen einbauen müssen und die für Laz emulieren. Das könnte insgesamt für solche Umstellungen ganz nützlich sein.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

schnullerbacke hat geschrieben:@mschnell

Ich würde dir empfehlen, für FPC/Laz eine Unit extra zu erstellen, wo du solche Konstanten auf die Entsprechungen ändern kannst..


Ja, genau so habe ich es auch begonnen, bevor ich bemerkt habe, dass es TSpinedit in Laz schon gibt und der portierte Code sich deshalb zwar übersetzen aber nicht linken ließ (warum ist mir allerdings schleierhaft).

Mir ist jedenfalls klar geworden, dass diverse Windows-ismen in Laz sehr anders als in Delphi umgesetzt worden sind und man die Portierung an diesen Stellen - es soll ja später auch auf Linux laufen - auf einer höheren Ebene ansetzten muss.

Nächstes Projekt wäre Async Pro (das ja inzwischen ein freies Source-Forge Projekt ist) Oder gibt es da schon eine Lazarus-Version von ?

-Michael

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

Beitrag von theo »

mschnell hat geschrieben:Nächstes Projekt wäre Async Pro (das ja inzwischen ein freies Source-Forge Projekt ist) Oder gibt es da schon eine Lazarus-Version von ?


Kaum. Sieht ziemlich Windows-lastig aus (TAPI, Microsoft Speech API...)

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@mschnell

Beim umsetzen der ICS-Kompos ist mir etwas untergekommen was zu einem Linkfehler führt. Bei Delphi ist es erlaubt, externe Prozeduren zunächst im interface ohne extern zu deklarieren und später im implementation auf extern zu ändern. Hinzu kommt, das {$EXTERNALSYM...} bei FPC offenbar nicht vorhanden ist. Bei diesen Sachen kommst du um die entsprechenden Deklarationen im FPC-Stil nicht herum. Ich vermute mal, das wird auch zu deinem Linkfehler geführt haben.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Die async pro würd ich nicht portieren wollen da macht ein rewrite mehr sinn.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

theo hat geschrieben:Kaum. Sieht ziemlich Windows-lastig aus (TAPI, Microsoft Speech API...)


Ich brauche zunächst nur die Teile für die grundlegende serielle Kommunikation. Später für TCP/IP . TAPI und speech API brauche ich nicht. Ich würde mich also nur an den entsprechenden Teilen versuchen.

Allerdings wird da massiv mit Threads gearbeitet. da fürchte ich einige Probleme.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:Die async pro würd ich nicht portieren wollen da macht ein rewrite mehr sinn.


Ich habe leider keine Wahl :(.

Die Delphi-Version der zu protierenden Software ist im produktiven Einsatz bei diversen Kunden.

Der Quellcode meiner Kollegen benutzt Async Pro und darf nicht verändert, sondern nur mit "$ifdef FPC ...." erweitert werden. Wenn man mit Delphi übersetzt, muss _exakt_ dasselbe 'rauskommen wie bisher.

Deshalb brauche ich ein Async-Pro für Lazarus bzw ein work-alike, das die tatsächlich verwendeten Funktionen reproduziert.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wenn dus schaffst bin ich besgeistert ichwill schon lang ein paar spielerein mit Telefonie implementieren aber ich bin da sehr skeptisch TAPI gibts in Linux schliesslich nicht und kein mir bekanntest equivalent das heisst z.b. DTMF und Caller IDs zu fuss aus dem Stream rauszufiltern also ein sehr effektive FFT usw.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

TAPI werd ich nicht anpacken. DTMF und Caller ID auch nicht. :(

Ein Freund von mir hat aber das FFT-Zeug für DTMF in einem Delphi-Programm realisiert. U.U. kann ich da etwas vermitteln.

-Michael

Antworten