AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DLL mit mehreren Rückgabewerten?

Ein Thema von Nju · begonnen am 17. Dez 2005 · letzter Beitrag vom 18. Dez 2005
Antwort Antwort
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#1

DLL mit mehreren Rückgabewerten?

  Alt 17. Dez 2005, 22:41
Hallo,
ich habe ein bischen mit der DLL-Programmierung unter Delphi 2005 PE rumgespielt und frage mich nun, ob es möglich ist aus den Funktionen der DLL mehrere Ergebnisse zurückzugeben?

Um das mal zu verdeutlichen:

Ich brauche eine Möglichkeit, womit ich dem Hauptprogramm mehrere Informationen geben kann. Zum Beispiel eine ganze Zahl und dazu noch ein boolscher Wert.

Dazu ein Beispiel:

Es wird im Hauptprogramm (ein Fantasiespiel) ein Schlag angesetzt. Die DLL-Funktion erhält nun die Spielwerte für den Angriff (Helden- als auch Gegnerwerte). Die Funktion berechnet nun anhand dieser Werte, dass der Schlag ausgeführt werden konnte und gleichzeitig ein Glückstreffer erzielt wurde. Das wären also in diesem Fall 3 Informationen, die aus der DLL ins Hauptprogramm übergeben werden müssen (1. Treffer, 2. Schaden, 3. war ein Glückstreffer).

Lässt sich das irgendwie bewerkstelligen, indem ich in der DLL Variablen erstellen kann oder auf Variablen im Hauptprogramm zugreifen kann?

Danke im Voraus!
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#2

Re: DLL mit mehreren Rückgabewerten?

  Alt 17. Dez 2005, 23:18
hallo,
ich bin mir nicht sicher, ob man solche funktionen auch in dlls einbinden kann, denke aber schon:

function blabliblo(übergabewert: integer; var rückgabewert: boolean): string;

d.h. die funktion bekommt einen "befehls"-parameter (in diesem fall "übergabewert") und den zugriff (weiss nicht ob diese beschreibung so stimmt, kann auch ein pointer oder so sein, naja) auf eine weitere variable (hier "rückgabewert"). diese variable kann von der funktion verwendet und überschrieben werden, d.h. die funktion kann den wert lesen, und auch setzen ("global" -naja falsches wort ).
außerdem gibt es ja noch den resulttyp.

--> du hast hier zwei ergebnisse.

mfg,
heiopei
  Mit Zitat antworten Zitat
TheReaper

Registriert seit: 27. Feb 2003
Ort: chemnitz
90 Beiträge
 
Delphi 2005 Personal
 
#3

Re: DLL mit mehreren Rückgabewerten?

  Alt 17. Dez 2005, 23:29
Hi,

Wenn ich das richtig verstanden habe willst du mit einer Funktion oder Prozedur mehrere Werte zurück liefern lassen. Guck dir ma den Befehl out an. Ich denke das dürfte dir weiter helfen.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: DLL mit mehreren Rückgabewerten?

  Alt 17. Dez 2005, 23:54
Zitat von TheReaper:
Hi,

Wenn ich das richtig verstanden habe willst du mit einer Funktion oder Prozedur mehrere Werte zurück liefern lassen. Guck dir ma den Befehl out an. Ich denke das dürfte dir weiter helfen.
Bringt den Leuten doch nicht immer falsch Begrifflichkeiten bei bzw. versucht mehr Sorgfalt an den Tag zu legen. Out ist kein Befehl, er existiert nicht selbstständig. Auch ein Operator ist er nicht - es ist ein Schlüsselwort zur Kennzeichnung eines Ausgabeparameters in der Parameterliste einer Funktion/Procedure/Methode.

Die genaue Begrifflichkeit ist Nebensache, aber es definitiv kein Befehl.

Grundlegend sollte man aber Var verwenden, dann hat man keine Probleme mit anderen Sprachen, da es laut Threadersteller um DLLs geht. Besonderheiten sind mit Out in Bezug auf andere DLLs von anderen Systemen nicht zu erwarten, aber mit Var ist man auf der sicheren Seite.
  Mit Zitat antworten Zitat
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#5

Re: DLL mit mehreren Rückgabewerten?

  Alt 18. Dez 2005, 11:03
Zunächst danke für die Antworten. heiopei und Muetze1 treffen es auf den Punkt. Wie kann ich denn dann die Funktion im Hauptprogramm aufrufen und wie kann ich auf diese deklarierte Variable als auch auf den eigentlichen Rückgabewert im Hauptprogramm zugreifen, wenn wir bei diesem Beispiel bleiben?


Code:
function blabliblo(übergabewert: integer; var rückgabewert: boolean): string;
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#6

Re: DLL mit mehreren Rückgabewerten?

  Alt 18. Dez 2005, 13:30
mittach,
du musst ersteinmal im hauptprogramm die funktion definieren (mit external... und gleichen variablennamen und variablenabfolge), also:

Delphi-Quellcode:
//im hauptprogramm
...
function blabliblo(übergabewert: integer; var rückgabewert: boolean): string; external 'xyz.dll';
...
bin mir jetzt grad gar nicht sicher, wie die syntax mit dem external geht - schau da lieber in der hilfe noch mal nach.

jetzt rufst du vom hauptprogramm die funktion auf

Delphi-Quellcode:
procedure hauptprogramm;
var
  result1: Boolean;
  result2: string;
begin
  result2 := blabliblo(100, result1);
end;
und bekommst die beiden ergebnisse!

mfg,
heiopei
  Mit Zitat antworten Zitat
Nju

Registriert seit: 16. Jun 2004
41 Beiträge
 
#7

Re: DLL mit mehreren Rückgabewerten?

  Alt 18. Dez 2005, 20:12
Gut, es funktioniert. Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: DLL mit mehreren Rückgabewerten?

  Alt 18. Dez 2005, 20:27
eine weitere möglichkeit ist einen Record zurück zu geben der beide Werte enhält.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema 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 15:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz