AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi [Andorra 2D] Compilieren mit Lazarus

[Andorra 2D] Compilieren mit Lazarus

Ein Tutorial von igel457 · begonnen am 3. Mär 2008 · letzter Beitrag vom 17. Aug 2009
Antwort Antwort
Benutzerbild von igel457
igel457
Registriert seit: 31. Aug 2005
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
{$mode objfpc}{$H+} am Anfang der Unit durch
{$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.
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
 
Romi
 
#2
  Alt 4. Jan 2009, 19:38
Hi,

ich habe ein Problem beim compilieren der OpenGL-DLL:

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
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#3
  Alt 4. Jan 2009, 19:51
Benutzt du Linux oder Windows?
Nikolai Wyderka
  Mit Zitat antworten Zitat
Romi
 
#4
  Alt 4. Jan 2009, 19:53
Windows Vista64.

EDIT: Problem gelöst. 32-bit Version von Lazarus verwenden!
  Mit Zitat antworten Zitat
LiS

 
Turbo Delphi für Win32
 
#5
  Alt 6. Mai 2009, 00:16
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:
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
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#6
  Alt 7. Mai 2009, 18:26
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
Andreas
  Mit Zitat antworten Zitat
LiS

 
Turbo Delphi für Win32
 
#7
  Alt 7. Mai 2009, 23:21
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
  Mit Zitat antworten Zitat
ZeroIII
 
#8
  Alt 14. Aug 2009, 11:20
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

mfg
ZeroIII
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#9
  Alt 14. Aug 2009, 11:49
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.
Andreas
  Mit Zitat antworten Zitat
ZeroIII
 
#10
  Alt 17. Aug 2009, 11:01
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
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 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