Deutsch
Forum

Frage zu Dll Rückgabewert

 

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  
 




Andreas
Miethe


Das liegt nicht am Rückgabewert.
Die Dll nutzt CDECL-Aufrufkonventionen statt StdCall.

Siehe hier :  [...] 
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
10.01.2008  
 




Christian
Schneider
Danke, da wäre ich im Leben nicht drauf gekommen

Der Code läuft bei mir leider nicht.
 
XProfan 11| Vista(64) SP2
10.01.2008  
 




Andreas
Miethe


Hast Du Dir die Beispiele von Uwe Pascal Niemeier mal runtergeladen ?

Funktioniert bei mir wunderbar.

Beispiel :
KompilierenMarkierenSeparieren
 $H Windows.ph

proc CallCdecl----------------------------------CallCdecl-------------------------------

    ****************** © by TCS (Uwe Pascal Niemeier) 042006
    declare asm#,RetVal&
    dim asm#,36
    long asm#, 0=-1947432107,166399045,-855390069,-394055169
    long asm#,16=217613060,1166799479,-1949237496,1019370981,0
    RetVal& = call( asm#,&(1),%pcount*4+8,&(2),&(3),&(4),&(5),&(6),
    &(7),&(8),&(9),&(10),&(11),&(12),&(13),&(14) )
    Dispose asm#
    Return retval&
    endproc---------------------------------------------------------------------------------
    declare DB&,File$
    declare SqlLite&,open&,close&-----------Cdecl-Funktionen
    SqlLite&=usedll(sqlite3.dll)
    open& =~GetProcAddress(SqlLite&,sqlite3_open)
    close& =~GetProcAddress(SqlLite&,sqlite3_close)
    File$ =Test1.db
    CallCdecl(open&,Addr(File$),Addr(DB&))
    Print Datenbank - Handle : +str$(DB&)
    Waitinput
    CallCdecl(close&,DB&)
    FreeDll SqlLite&
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
10.01.2008  
 




Christian
Schneider
Den hab ich übersehen. Danke, funktioniert.
 
XProfan 11| Vista(64) SP2
10.01.2008  
 




RGH
Die Geschichte hat mich daran erinnert, dass ich schon länger vorhatte, in XProfan auch CDECL zu unterstützen. Ab der nächsten Subscriptionsversion funktioniert folgender Code:
KompilierenMarkierenSeparieren
Neu ist lediglich Set(CallConv, CDECL).

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  
 




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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.490 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