Deutsch
Forum

Rückgabewerte bei C++ - DLLs ?!

 

Christian
Eichler
Mal wieder hab ich ein Problem: Ich weiß nicht, wie ich in C++ in diesem Fall einen double - Wert zurückgeben kann...
[siehe Anhang]
Das Problem bei der DLL im Anhang ist, dass das Profanprogramm (die .prf-Datei) einen anderen Wert druckt, wie in der DLL eigentlich steht ...
Wie geht das

mfg Christian E

PS: Ja, ich kann mir vorstellen, dass ich euch langsam langweile ...

8 kB
Hochgeladen:12.12.2007
Ladeanzahl221
Herunterladen
 
Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6
12.12.2007  
 




Michael
Wodrich
Float unter C, da gibt es die 4 Byte großen und die 8 Byte großen.

Bei den kleineren mußt Du mit Single/Double umwandeln (siehe in der Hilfe).

Vielleicht schreibt Sebastian uns ja mal ein Tutorial zur Erstellung von C-DLLs - mit Übergabe/Rückgabe aller Profanwerte. Dann wäre alles dazu auf einem Fleck.


PS: Ja, ich kann mir vorstellen, dass ich euch langsam langweile ...


Deine Fragen sind doch immer sehr interessant...

Wozu muß die Funktion eigentlich CALLBACK sein? Hast Du es mal ohne diese Angabe versucht?

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
12.12.2007  
 




Frank
Abbing
Übergib einfach einen Zeiger auf einen Speicherbereich. In dem kannst du beliebig viele Bytes speichern.
 
12.12.2007  
 




Sebastian
König
Hallo,

XProfan erwartet als Rückgabewert von externen Funktionen immer Werte mit einer Größe von 4 Byte, also im Grunde Longs. Natürlich kann man in der DLL einfach einen C/C++ float zurückgeben und dann in XProfan mit @Double() umwandeln, also zum Beispiel:

C++:
KompilierenMarkierenSeparieren
XProfan:
KompilierenMarkierenSeparieren
print Wert = ,@Double(Mean(3,2))

Zur Rückgabe von C/C++ doubles, die ja eine Breite von 8 Byte haben, ist Franks Vorschlag mit dem Bereich genau richtig. Für einen einzelnen Wert könnte das dann so aussehen:

C++:
KompilierenMarkierenSeparieren
XProfan:
KompilierenMarkierenSeparieren
dim ret#,8
Mean(2,3,ret#)
print Wert = ,@Float(ret#)
dispose ret#

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.12.2007  
 




Christian
Eichler
Hmm... seit einer Stunde versuch ich jetzt das zum laufen zu bringen. Erst wollte ich die DLL mit Profan aufrufen. Da es aber die Funktuonen Float() und Double() nicht gibt, hab ich es mal mit String$() versucht, bin aber auf die Nase gefallen.
Dann hab ich mir gedacht, dass es eh sinnvoller wäre, auf die DLL mit C++ zuzugreifen. Okay, geschafft hab ich, das ich DLLs mithilfe von LoadLibrary zu laden und dann mit ... naja, schaut euch einfach den Code an :
KompilierenMarkierenSeparieren
In der DLL dll.dll ( ) ist lediglich eine Funktion, die funk heißt und einen Int-Parameter hat, und als Rückgabewert auch wieder diesen Parameter zurückgibt .

Laden kann ich die DLL, funktionnieren tuts anscheinend auch. Nur einen double oder float als Rückgabewert funktionniert nicht. ... ... also wieder das altbekannte Problem ... ajjj ...
Naja, für heute langts mir ... hab ja schließlich heute schon ein 3 - stüniges Deutschaufsatzschreiben hinter mir ...

Wenns na nicht so kompliziert wäre ....

mfg Christian E
 
Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6
13.12.2007  
 




Sebastian
König
Ah, ich hatte übersehen, dass Du mit Profan² 6.6 arbeitest - da gibt es @Double(), @Single() und @Float() noch nicht... Für die ersten beiden findest Du Ersatz-Prozeduren in meinen alten DirectX-Codes - die sind allerdings etwas unbequem in der Handhabung

Bei dem anderen Problem wäre es hilfreich, wenn Du mal den Quellcode der Funktion funk posten könntest. Soll diese eine Fließkommazahl zurückgeben? Wenn ja, liegt der Fehler evtl. einfach in der Zeile

typedef int (*DLLFUNC)(int);

Diese definiert schließlich DLLFUNC als Zeiger auf eine Funktion, die einen int als Argument erwartet und auch einen int zurückgibt. Abgesehen davon fehlt auch das WINAPI bzw. __stdcall um die Aufrufkonvention anzugeben...

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
13.12.2007  
 




Christian
Eichler
Ah, danke

Ich habs des jetzt soweit geschafft, dass es funktionniert, lag wirklich irgendwie an den nicht passenden ints

Danke soweit.
Ergebniss wird gepostet, wenn verwertbar ...

mfg Christian E
 
Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6
13.12.2007  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.439 Betrachtungen

Unbenanntvor 0 min.
Sven Bader26.02.2023
Erasmus.Herold02.05.2019
E.T.17.01.2012
Stephan Lührsen04.05.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie