Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Nov 25, 2020 05:42

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Fuction Rückgabe
BeitragVerfasst: Fr Sep 26, 2003 20:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Hallo alle zusammen, ich habe da mal eine bescheidene Frage, also erst einmal kurz eine Erleuterung dazu :

Ich habe jetzt in der DLL die folgenden Konstanten geschrieben :
Code:
  1. // BOOLEANS
  2.   tFALSE            = 0;
  3.   tTRUE             = 1;
  4.   tIS_INIT          = FALSE;
  5.   tIS_EXIT          = FALSE;
  6.   tIS_ACTIVE        = FALSE;


Und dann habe ich z.B. die folgende Function, auch in der DLL, die dann exportiert wird :
Code:
  1. function tInitEngine(): Boolean;


Im Programm mache diese dann wie folgt bekannt :
Code:
  1. function tInitEngine():Boolean; external;


Wenn ich diese Function nun aufrufe, möchte ich als booleanischen Rückgabewert z.B. mit tIS_INIT im Game (der EXE) arbeiten, jetzt meine Frage : Wie kann ich das realisieren ?

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 20:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
:wink: Von C++ kenn ich das so das die (in diesem Fall) Titan.lib einfach eingebunden wird und dann habe ich Zugriff auf die Funktionen usw.

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 20:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich weiß jetzt nicht ganz was dein Problem ist aber jede Funktion hat eine Variable namens Result. Und wenn du da was rein schreibst kommt das auf der anderen Seite auch wieder raus. Hat das jetzt deine Frage beantwortet? Wenn nicht, dann erkläre mal bitte was du genau vor hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 20:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Ja Du hast recht ist ein bisschen falsch erklärt denke ich. Also ich möchte z.B. die Funktion tInitEngine() in meinen Spiel aufrufen und das Erginis für die Fehlerbehandlung auswerten. Also ich möchte dann z.B. mit einer IF Schleife abfragen ob das Resultat tIS_INIT = TRUE oder FALSE ist.

Zum zweiten finde ich in der Delphi Hilfe nicht wie das mit dem einbinden der DLL funktioniert, so das ich dann die Funktionen alle nutzen kann, bei C++ binde ich in den Projekt Optionen ja z.B. zu der Titan.dll meine Titan.lib ein und habe dann auf die ganzen Funktionen zugriff beim coden. :wink:

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 20:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich glaube ich habe jetzt eine Ahnung was du meinst. ;)

Es gibt zwei Möglichkeiten zum einbinden von DLL's.
Du machst einmal LoadLibrary und dann für die Methoden getProcAddress. Ein Beispiel davon findest du in der dglOpenGL.pas oder in der OpenGl12.pas.
(dynamisches Laden)

Oder die zweite Möglichkeit mithilfe der Direktive External.
Dazu kann ich nur auf die Delphi Hilfe verweisen. Besser kann man es nicht beschreiben. (F1 auf external) :)
(statisches Laden)

Und zu deinem anderen Problem. Da solltest du eine Methode machen die einen Fehlercode zurück gibt. Es gibt (leider) (meines wissens) keine Möglichkeit auf Variablen innerhalb einer DLL zugreifen zu können. Du könntest für jede Variable eine Methode machen um deren Wert abzufragen. Aber da ist es besser du definierst dir irgendwo ein paar Fehlercodes und testest in der Methode in deiner DLL, was falsch ist und lieferst den dementsprechenden Fehlercode zurück. Oder dementsprechend den Fehlercode 0 der normalerweise angibt, dass alles Chlor ist. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 21:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Ja Danke das mit der DLL, also diese zu laden habe ich mit external gemacht.

[EDIT SM3D] -> Code nachträglich gelöscht, da dieser VIEL zu groß war, @SoS danke nochmal für den Hinweis, manchmal idt man so in der Materie und vergisst die guten Grundsetze.

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Zuletzt geändert von SM3D am Sa Feb 14, 2004 15:05, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 26, 2003 21:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Jetzt habe ich das mal in Delphi wie folgt geändert:

die Typen
Code:
  1. //=== GLOBALE TYPEN ============================================================
  2. type
  3.  
  4.   tIS_INIT = Boolean;
  5.   tIS_EXIT = Boolean;


die Functionen
Code:
  1. function tInitEngine(): tIS_INIT;
  2. function tExitEngine(): tIS_EXIT;


hier der Code der Functionen
Code:
  1. // Funktion zum initialisieren der Engine
  2. function tInitEngine(): tIS_INIT;
  3. begin
  4.     tInitLog; // Hier wird die Log initialisiert
  5.     //glInit; // Hier wird OpenGL initialisiert
  6.     // HIER alles andere initialisieren
  7.  
  8.     if result = tIS_INIT(FALSE) then
  9.     tLog.tWriteToLog('Engine konnte nicht initialisiert werden...',TRUE)
  10.  
  11.     else
  12.     tLog.tWriteToLog('Engine wurde initialisiert...',TRUE);
  13.     result := tIS_INIT(TRUE);
  14. end;
  15.  
  16. // Funktion zum herunterfahren der Engine
  17. function tExitEngine(): tIS_EXIT;
  18. begin
  19.     // Hier alles runter fahren
  20.  
  21.     if result = tIS_EXIT(FALSE) then
  22.     tLog.tWriteToLog('Engine konnte nicht ordnungsgemäß '
  23.                      +'herunter gefahren werden...',TRUE)
  24.  
  25.     else
  26.     tLog.tWriteToLog('Engine herunter gefahren...',TRUE)
  27.     tExitLog;
  28.     result := tIS_EXIT(TRUE);
  29. end;

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2003 08:00 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hi,

Code:
  1.  
  2.  if result = tIS_INIT(FALSE) then
  3.     tLog.tWriteToLog('Engine konnte nicht initialisiert werden...',TRUE)
  4.  


ich finde diese Schreibweise sehr seltsam. Du konvertierst einen Booleanwert in einen anderen Booleanwert. Desweiteren ist Result bei Dir nie initialisiert worden. Result bezieht sich auf die Funktion im aktuellen Block und nicht auf andere Funktionen.

Ich würde das anders schreiben:

Code:
  1.  
  2. // Funktion zum initialisieren der Engine
  3. function tInitEngine(): tIS_INIT;
  4. begin
  5.     // Hier wird die Log initialisiert
  6.     Result := tInitLog;
  7.  
  8.     // Hier wird OpenGL initialisiert
  9.     if Result then begin
  10.       Result := glInit;
  11.     end;
  12.  
  13.     // HIER alles andere initialisieren
  14.     if not Result then
  15.       tLog.tWriteToLog('Engine konnte nicht initialisiert werden...',TRUE)
  16.     else
  17.       tLog.tWriteToLog('Engine wurde initialisiert...',TRUE);
  18. end;
  19.  


Hat es irgendeine Bedeutung, warum 2 neue Type tIS_INIT und tIS_EXIT definierst, die auch nur 2 oder 3 Stellen im Code verwendet werden?

Gruß
KidPaddle

PS.: Die 1 zu 1 Übersetzung von C++ nach Delphi ist nicht unbedingt die beste Lösung, da man viele Eigenheiten von C++ versucht in Delphi nach zubilden.

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2003 11:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Ja Danke Dir, die C++ Story diente nur dem Sinnbild, damit meine schlechte Erklärung ein wenig ausgeglichen wird *g*.

Danke für die Hilfe mit der IF Schleife und den Result, so wie ich das jetzt sehe ist das nun genau wie ich das haben möchte, aber das könnte echt sein das ich noch viel von C++ im Kopf habe.

Das tIS_INIT gilt nur für die Initialisierung der Engine als Result und das tIS_EX_EXIT halt nur für die Exit Funktion, um dort das Resultat zu erfragen. :roll:

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2003 19:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Zitat:
Code:
  1.  
  2. // Funktion zum initialisieren der Engine
  3. function tInitEngine(): tIS_INIT;
  4. begin
  5.     // Hier wird die Log initialisiert
  6.     Result := tInitLog; <<<-------------- Man kann Boolean keine    
  7.                                           Procedure zuweisen
  8.  
  9.    // Hier wird OpenGL initialisiert
  10.    
  11.     if Result then begin
  12.       Result := glInit;
  13.     end;
  14.  
  15.     // HIER alles andere initialisieren
  16.     if not Result then
  17.       tLog.tWriteToLog('Engine konnte nicht initialisiert werden...',TRUE)
  18.     else
  19.       tLog.tWriteToLog('Engine wurde initialisiert...',TRUE);
  20. end;
  21.  

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2003 19:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
SM3D hat geschrieben:
Result := tInitLog; <<<-------------- Man kann Boolean keine Procedure zuweisen

Das halte ich aber für ein Gerücht. Da muss irgendwas mit deiner Methode nicht richtig sein. Warum machst du eigentlich neue Booleantypen? Es fordert (für außenstehende) auch nicht gerade die Lesbarkeit deines Programmes. Und wer weiß. Wo möglich bekommst du dadurch ja auch noch Schwierigkeiten mit den Typen und den Zuweisungen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2003 19:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
:cry: Sorry, aber das war die Compilermeldung. Eigentlich sollen die neuen Typen es verfeinfachen damit zu arbeiten, das scheint aber nicht der Fall zu sein. Hey und ich wollte hier keinem auf dem Fuß trampeln. :wink:

Achso hatte was vergessen , wenn ich das so schreibe :

result := tIS_INT;

sagt der Compiler "( erwartet aber ; gefunden"

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2003 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5811
Programmiersprache: C++
Ich frag mich auch warum du das so kompliziert machst...warum nicht so :
Code:
  1. type
  2.  TIsInit = Boolean;
  3. ...
  4. function tInitEngine : Boolean;
  5. begin
  6. ...
  7. Result := Init;
  8. end;
  9. ...
  10. function xyz;
  11. if tInitEngine = TIsInit then...
  12. end;

Warum neue Typen als Funktionsergebnis deaklarieren, wenn der neue Typ sowieso in anderer Form vorhanden ist?Und kleiner Hinweis : Unterstriche sind eine Unsitte aus C(++), und bei Delphi musst du auch keine leeren Klammern setzen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 27, 2003 19:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
@SOS,

vielen Dank an Euch, sorry muß mir das eben wieder abgewöhnen, ist garnicht so leicht, deshalb warscheinlich auch dieser Umstand.

Ich werde das gleich mal ändern. :wink:

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 24, 2003 11:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Hallo alle zusammen,,,

nachdem ich so lange Zeit abwesend war (Sorry, totaler Zeitmangel), habe ich die HTML Log Geschichte nun als DLL gelöst, diese werde ich dann im Januar hier Online stellen.

Danke an alle die mich hier bei diesem Thema unterstützt haben, danke ebenfalls an das Delphi GL Team, das ich trotz der langen inaktivität hier noch nicht rausgeflogen bin *g*.

Ab Januar werde ich dann wieder richtig aktiv werden können, bis dahin ist mein jetziges Projekt NGM (Necromunda Gang Manager für das Tabletopspiel Necromunda von Games Workshop) beendet sein.

Viele nette Grüße an alle Delphi GL User und natürlich das Team hier. Eine fröhliche Weinachten und einen guten Rutsch ins neue Jahr, falls wir uns vorher nicht mehr lesen. :D :wink: :D

SM3D (Sascha) :D

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.069s | 17 Queries | GZIP : On ]