Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi [Andorra 2D] Compilieren mit Lazarus (https://www.delphipraxis.net/109546-%5Bandorra-2d%5D-compilieren-mit-lazarus.html)

igel457 3. Mär 2008 14:30


[Andorra 2D] Compilieren mit Lazarus
 
Das Originaltutorial befindet sich hier.

Andorra 2D - Compilieren mit Lazarus

Aller Anfang ist schwer
Um Andorra 2D mit Lazarus kompilieren zu können, sind einige Besonderheiten zu beachten. Hat man diese überwunden, so steht einem jedoch nichts mehr im Wege Andorra 2D sogar unter Linux einzusetzen. Dieses Tutorial setzt eine lauffähige Version von Lazarus sowie einige Kenntnisse im Umgang damit voraus. Falls es also Probleme mit Lazarzus geben sollte, die nicht direkt mit Andorra 2D zusammenhängen (wie z.B. "Lazarus meckert 'Unit Interfaces nicht gefunden', was soll ich tun?"), so richten Sie diese bitte nicht an mich. Aufrichtig wie ich bin, muss ich auch zugeben, selbst noch nicht sehr viel mit Lazarus gearbeitet zu haben. Wenn Sie also noch irgendwelche Fehler oder Verbesserungsvorschläge für den Lazarussupport habe, so zögern Sie nicht, mich darüber in Kenntnis zu setzen.


Das Kompilieren des Plugins
Die erste Hürde, welche wir überwinden müssen, ist die Tatsache, dass die mit Delphi kompilierten Plugin-DLLs nicht mit Lazarus kompatibel sind. Dies ist ja auch logisch - schließlich handelt es sich bei dem Delphi internen Compilier und dem Free Pascal Compiler (welcher von Lazarus verwendet wird) um zwei Programme, die völlig unabhängig voneinander Entwickelt wurden. Aus diesem Grund ist die Klassenstruktur, welche von Free Pascal erstellt wurde inkompatibel zur Klassenstruktur von Delphi. Nun tauscht Andorra 2D allerdings Objekte zwischen Bibliothek und Hostapplikation aus, was unweigerlich zu Speicherzugriffverletzungen führt.
Wir umgehen dieses Problem einfach dadurch, indem wir die Plugin-Bibliothek neu mit Lazarus erstellen. Dazu öffnen wir die Datei "AndorraOGLLaz.lpi" aus dem Verzeichnis "src/dll/opengl/" mit Lazarus. Bevor wir diese Datei jedoch einfach so kompilieren können, müssen wir erst einmal die Suchpfade sowie Ausgabeverzeichnisse entsprechend einstellen.
Dazu tragen wir über "Projekt->Compilereinstellungen->Pfade->Andere Unitdateien->..." den Pfad zu dem OpenGL-Header sowie den Pfad zu den Andorra 2D Quellcodedateien ein. Falls es Probleme mit nicht gefundenen Unitdateien geben sollte, kann es helfen die "Pfad-Templates" einfach einmal hinzuzufügen. Besonders unter Linux wollte Andorra 2D nur mit diesen kompilieren.
http://andorra.sourceforge.net/tutots/lazarus/img1.png
Unter im Pfade-Dialog sollte zudem unter "Unitausgabepfad" sollte "../../dcu/" eingetragen sein und unter "Projekt->Projekteinstellungen->Zieldateiname" "../../../bin/". Nun können wir es wagen die Bibliothek mit einem Klick auf "Start->Alles neu erstellen" zu erzeugen. Wenn Sie mit der Erfolgsmeldung "Projekt "AndorraOGLLaz" erfolgreich gebaut. :)" beglückt werden, sollten Sie sich noch vergewissern, dass das Plugin auch wirklich neu erstellt worden ist. Werfen Sie dazu einen Blick in das Zielverzeichnis und überprüfen Sie das Änderungsdatum von "AndorraOGLLaz.dll".
Wie Sie vielleicht bemerkt haben, weicht der Dateiname der Lazarus-DLL von dem der Delphi-DLL ab um Verwechslung zu vermeiden.
Wenn bis hier her alles geklappt hat, steht einem Ausflug in die Welt von Andorra 2D mit der Hilfe von Lazarus nicht mehr viel im Wege.


Unser Lazarus Andorra 2D Projekt
Nun möchten wir ein einfaches Andorra 2D Projekt mit Lazarus erstellen. Dazu erstellen wir über "Datei->Neu" ein neues "Application"-Projekt und fügen wie beim kompilieren des OpenGL-Plugins den Andorra 2D Suchpfad hinzu. Außerdem kann es unter Verwendung eines anderen Widgetsets als "Win32/Win64" (also zum Beispiel unter Linux) notwendig werden das Package "LazOpenGLContext" zu Ihrem Projekt hinzuzufügen.
http://andorra.sourceforge.net/tutots/lazarus/img2.png


Zu Fenstersystemen und Gerätekontexten
Diese Notwendigkeit hat folgenden Hintergrund: Unter Verwendung des normalen Windows-Widgetsets kann Andorra 2D der Pluginbibliothek einfach ein Handle (das ist so zu sagen die Inventarnummer unseres Fensters) übergeben. Danach kümmert sich das Plugin selbst um die Erzeugung des entsprechenden Devicecontexts (was unter Windows mit wenigen Zeilen abgehakt ist). Dabei handelt es sich um den Bereich, auf den die Grafikkarte bzw. das verwendete Grafiksystem zeichnen kann. Das Devicecontext muss jedoch vom verwendeten Fenstersystem verwaltet werden. Nun gibt es unter Linux die verschiedensten Fenstersysteme (von denen man ja einige bei Lazarus als Widgetset auswählen kann). Nun müsste das Plugin für jedes dieser Systeme eine Contexterzeugungsroutine bereithalten, was natürlich ein enormer Aufwand wäre. Zum Glück haben sich die fleißigen Entwickler von Lazarus auch hier etwas einfallen lassen: Die Komponente "TOpenGLControl", welches ein Devicecontext angepasst an unser ausgewähltes Fenstersystem und Betriebsystem für unsere Anwendung erstellt. Auf dieses kann das Plugin dann direkt zeichnen. Alternative Windowframeworks, wie zum Beispiel das GLFW-Framework arbeiten nach der gleichen Methode. Mehr Informationen wird es in einem Tutorial "Andorra 2D Windowframeworks" geben.


Ein wenig Code...
Nun Benötigen wir nur noch ein klein wenig Code um Andorra 2D unter Lazarus testen zu können:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  AdDraw := TAdDraw.Create(self);
  AdDraw.DllName := 'AndorraOGLLaz.dll';
  Application.OnIdle := @Idle;
  AdDraw.Initialize;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  AdDraw.Free;
end;

procedure TForm1.Idle(Sender: TObject; var Done:boolean);
begin
  AdDraw.ClearSurface(0);
  AdDraw.BeginScene;
  with AdDraw.Canvas do
  begin
    Font := AdDraw.Fonts.GenerateFont('Arial', 24, []);
    TextOut(0,0,'Andorra 2D...');
    Font := AdDraw.Fonts.GenerateFont('Arial', 10, []);
    TextOut(0,30,'...works with Lazarus too');
  end;
  AdDraw.EndScene;
  AdDraw.Flip;
end;
Um Problemen vorzubeugen, hat es sich als nützlich erwiesen die Zeile
Delphi-Quellcode:
{$mode objfpc}{$H+}
am Anfang der Unit durch
Delphi-Quellcode:
{$MODE DELPHI}
zu ersetzen.
http://andorra.sourceforge.net/tutots/lazarus/img3.png

Copyright und Lizenz
(c) by Andreas Stöckel Februar 2008

Der Inhalt dieses Tutorials steht unter der GNU Lizenz für freie Dokumentation.

Romi 4. Jan 2009 19:38

Re: [Andorra 2D] Compilieren mit Lazarus
 
Hi,

ich habe ein Problem beim compilieren der OpenGL-DLL:

Delphi-Quellcode:
AndorraOGL.dpr(82,1) Error: Import library not found for c
Hat das etwas mit den "Pfad-Templates", die du erwähnt hast, zu tun? Den Satz verstehe ich nicht so ganz ;)
Ich nutze die neuste Lazarus-Version (stable) und Andorra 2D 0.4.5.1.

Danke schonmal,
Roman

inherited 4. Jan 2009 19:51

Re: [Andorra 2D] Compilieren mit Lazarus
 
Benutzt du Linux oder Windows?

Romi 4. Jan 2009 19:53

Re: [Andorra 2D] Compilieren mit Lazarus
 
Windows Vista64.

EDIT: Problem gelöst. 32-bit Version von Lazarus verwenden!

LiS 6. Mai 2009 00:16

Re: [Andorra 2D] Compilieren mit Lazarus
 
Hallo!

Ich probiere gerade Andorra 2D zum laufen zu kriegen, habe aber leider keinen blassen Schimmer von all dem.
Beim Compilieren liegt mein erstes Problem:
Also in dem besagten Ordner finde ich keine AndorraOGLLaz.lpi, sondern nur AndorraOGLcg.lpi und AndorraOGL.lpi.
Allerdings gibt es schon eine AndorraOGLLaz.dll im Zielordner. Kann ich diese Datei so verwenden?
Meine nächste Fage ist dann: Wie verwende ich sie?
Ich habe den Pfad "Andorra/src" im Projekt mit angegeben, aber ich bekomme eine Fehlermeldung:
Delphi-Quellcode:
AdDraws.pas(28,2) Fatal: Can't open include file "andorra_conf.inc"
Wäre echt nett, wenn ihr mir helfen könnt, denn ich habe wie gesagt gar keine Ahnung. :?

Gruß
Leif

igel457 7. Mai 2009 18:26

Re: [Andorra 2D] Compilieren mit Lazarus
 
Hallo,

wichtig ist, dass du wie beschrieben alle Suchpfade einzufügen. In der aktuellen Andorra Version 0.4.5.1 befinden sich alle benötigten Header im Verzeichnis "lib" des Andorra-Paketes. Versuche auch den Suchpfad für Include-Dateien in Lazarus korrekt zu setzten.

Die "AndorraOGLLaz.dll" solltest du theoretisch verwenden können - wie das geht, ist in Tutorial 1 erklärt. Die Tutorials findest du hier: http://andorra.sf.net/index.php?section=tutorials

Andreas

LiS 7. Mai 2009 23:21

Re: [Andorra 2D] Compilieren mit Lazarus
 
Vielen Dank für die Hilfe!
Ich war wohl etwas voreilig mit meiner Frage... mir fehlte tatsächlich noch ein Pfad, obwohl ich dachte ich hätte alle.
Mein Traum war es schon immer, irgendwann mal Spiele (mit tooler Grafik) zu programmieren. Andorra ist echt super und auch relativ gut verständlich bis jetzt. Ich werde mich jetzt noch mal ein bisschen da rein fuchsen.

Gruß
Leif

ZeroIII 14. Aug 2009 11:20

Re: [Andorra 2D] Compilieren mit Lazarus
 
HI!

Ich bin neu hier und weiß, dass dieser Thread schon relativ alt ist...
Aber ich Probleme mit dem Compilieren...

Da in der neuesten Version (zumindest bei mir), die Zieldatei AndorraOGLLaz.dll, schon im Ordner bin war, versuchte ich dem Tutorial 1 zu folgen, ich glaube jedoch, dass irgendwas immernoch falsch ist, naja:

Ich habe die Datei in den Ordner src verschoben, und den dann zum Lazarus-Verzeichnis (glaub ich zumindest, dass es das ist) rüberkopiert.
Dann hab ich den Pfad in Lazarus, bei den Compilereinstellungen in die Spalte Bibliotheken (-FI) eingegeben...

Ich dachte es funktioniert, aber als ich es dann ausprobiert habe, kam die Fehlermeldung:

Unit AdDraw was not found (oder so ähnlich)(das kam auch bei den anderen Ad's)

Achja, das Lazarus Tutorial hab ich auch probiert, aber dabei hat auch etwas nicht funkioniert, weiß aber leider nicht mehr was...

Noch zur Info: Betriebssystem Windows Vista Home Premium
Lazarus' neueste Version
Andorra ebenfalls

Bitte Hilfe, schnelle Hilfe
Ich bin kein großer Geduldsmensch :mrgreen:

mfg
ZeroIII

igel457 14. Aug 2009 11:49

Re: [Andorra 2D] Compilieren mit Lazarus
 
Ich würde die AndorraOGLLaz trotzdem nochmal neu kompilieren und Schritt für Schritt wie im Tutorial vorgehen, dann ist auch sichergestellt, das es funktioniert. Deine Fehlermeldung weißt auf fehlende Suchpfade hin.

ZeroIII 17. Aug 2009 11:01

Re: [Andorra 2D] Compilieren mit Lazarus
 
Ich hab jetzt nocheinmal das Lazarus-Tutorial versucht. Ich hab alles Schritt für Schritt durchgemacht und alles überprüft, aber er schreibt immernoch die Fehlermeldung: Fatal: Can't find Unit AdClasses

Ich hab es mit und ohne Pfad-Templates versucht, die gleiche Fehlemeldung...
Mit anderen Pfaden, wieder das gleiche...

Inzwischen bin ich ratlos, was mach ich falsch?

mfg
ZeroIII


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf