Deutsch
Forum

Frage zu Dll Rückgabewert

 
- Seite 1 -



Christian
Schneider
Hallo Leute,

ich frickle schon eine ganze Weile daran rum eine Dll ans laufen zu bekommen (siehe Anhang).

Ich poste mal einen der Codes (davon gibt es ne Menge, mit der Gemeinsamkeit sie funkionieren nicht )

Da die Datenbank erstellt wird (hat seine Richtigkeit, wenn noch nicht vorhanden) und anschließend der Interpreter abschmiert, gehe ich mal davon aus es liegt am Rückgabewert.

Die Doku zur Funktion findet sich hier:  [...] 

Gruß Christian

P.S. Hatte mit dll´s bisher nicht wirklich viel am Hut ;)

Nutze die 11Sub12

421 kB
Hochgeladen:10.01.2008
Ladeanzahl148
Herunterladen
 
XProfan 11| Vista(64) SP2
10.01.2008  
 



 
- Seite 1 -



Jac
de
Lad
Erklärt mal bitte jemand den Vorteil von cdecl? Und die Unterschiede? Und überhaupt???
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.01.2008  
 




Christian
Schneider
Da fällt mir spontan nur eins ein:

@JAC:  [...] 
 
XProfan 11| Vista(64) SP2
10.01.2008  
 




Jac
de
Lad
Aha, hat also für den Ottonormalprofaner keine Auswirkungen?!
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.01.2008  
 




Christian
Schneider
Nein. Außer das jetzt mehr dll´s nativ funkionieren als bisher.

@Roland: Was wenn man mehrere dll´s in einem Programm verwendet und ein Teil davon per cdecl und andere per stdcall arbeiten?
 
XProfan 11| Vista(64) SP2
10.01.2008  
 




Jac
de
Lad
Welche denn zum Beispiel?
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.01.2008  
 



Jac
Erklärt mal bitte jemand den Vorteil von cdecl? Und die Unterschiede? Und überhaupt???


Laienhaft ausgedrückt könnte man sagen auf Asmebene gibt es keine Funktionen und keine Funktionsparameter - es gibt aber Sprungadressen und einen Stack. Wenn man jetzt behauptet der Code hinter den Sprungadressen entspricht einem Funktionscode dann wird der Stack als Parametermerker benutzt. Man legt (push) also Werte auf den Stack und springt (call) dann zu einer Sprungadresse. Der Code dahinter nimmt die Werte von Stack (pop) um diese zu verarbeiten. Der Vollständigkeithalber könnte man erwähnen das ein möglicher Rückgabewert einer solchen Funktion grundsätzlich im eax-Register hinterlegt wird bevor die Funktion per ret den Rücksprung veranlasst.

Ob stdcall oder cdecl legt hierbei z.B. die Reihenfolge fest mit der die Werte vom Stack genommen werden. Bei cdecl werden die Params halt in umgekehrter Reihenfolge zu stdcall auf den Stack gepackt.

Je nachdem mit welcher Compileroption z.B. eine DLL kompiliert wurde (oder wie der asm gestrickt ist) muss man demnach mit cdecl oder stdcall aufrufen.
 
10.01.2008  
 



 
- Seite 2 -



Jac
de
Lad
Und wozu wurede das eingeführt? Warum ist das nicht einheitlich??
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.01.2008  
 



Jac
Und wozu wurede das eingeführt? Warum ist das nicht einheitlich??


Ideologisch betrachtet oder technisch?
 
10.01.2008  
 




Jac
de
Lad
Egal.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.01.2008  
 




RGH
Christian Schneider
Nein. Außer das jetzt mehr dll´s nativ funkionieren als bisher.

@Roland: Was wenn man mehrere dll´s in einem Programm verwendet und ein Teil davon per cdecl und andere per stdcall arbeiten?


Es muß nur vor dem Aufruf der jeweiligen Funktion (also nicht schon bei DEF, ImportFunc oder ImportDLL) der richtige Aufrufmodus eingestellt sein. Derzeit werden aber nur CDECL und STDCALL unterstützt.

Und die CallBack-Funktionen sind immer im Windows-Standard STDCALL.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
10.01.2008  
 




Michael
Wodrich
Und ...
- C-Compiler benutzen CDECL
- Windows benutzt STDCALL
- Assembler kann beides.

Das ist nur ein Pi-mal-Daumen Überblick. Da viele Programmiersprachen das Aufrufmodell frei wählen können werden sehr viele DLLs halt Windows-konform angeboten - aber leider nicht alle (meist die Interessantesten nicht).

Ein Grund für das leider nicht: die aus C her bekannten Funktionen mit beliebigen Parametern (int Anzahl, ...) gibt es nur in der CDECL-Variante.

Schöne Grüße
Michael Wodrich

Autsch, das gibts auch alles bei Wikipedia - man muß sich nur zum Lesen durchringen.
 
Programmieren, das spannendste Detektivspiel der Welt.
12.01.2008  
 




RGH
Michael Wodrich
Und ...
- C-Compiler benutzen CDECL
- Windows benutzt STDCALL
- Assembler kann beides.


Ein Grund für die verschiedenen Modelle ist, dass sich die Compilerhersteller ein Aufrufmodell für ihre intenen Funktionen ausdachten, lange bevor es Windows und/oder gemeinsam genutzte DLLs gab. Die Aufgabe war immer gleich: Die Parameter mussten auf den Stack und anschließend musste derselbe wieder aufgeräumt werden. Nur in der Reihenfolge der Parameter und der Frage, wer denn nun fürs Aufräumen zuständig ist (Funktion oder Aufrufer), gab es unterschiedliche Lösungen. Und zur Beschleunigung übergab man auch einige Parameter per Register.

Moderne Compiler (auch alle C und C++ Compiler) können aber bei Erstellung von gemeinsam genutzen Bibliotheken angeben, welche der Aufrufkonventionen genutzt werden. DELPHI benutzt z.B. defaultmäßig REGISTER (d.h. die ersten Parameter werden per Prozessorregister-Register übergeben - das spart Zeit und Stackspeicher), aber für DLLs kann man angeben, ob man CDECL, STDCALL oder FARPASCAL nutzen will. 32-Bit-Windows benutzt STDCALL, also sollte man unter Windows nutzbare DLLs vorzugsweise mit STDCALL kompilieren. (16-Bit-Windows nutzte FARPASCAL als Aufrufkonvention. Diese Konvention kommt aber meines Wissens in DLLs nicht mehr vor.) CDECL findet man oft bei in C++ erstellten Bibliotheken, die es, wie eben SQLite, für Linux und Windows gibt.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
12.01.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.502 Betrachtungen

Unbenanntvor 0 min.
Georg Teles03.10.2014
Michael Borowiak19.12.2012

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