| |
|
|
Christian Schneider | ¡Hola Personas,
Yo frickle ya una todo Weile daran rum una Dll ans laufen a bekommen (siehe Anhang).
Puedo publicar veces una el Codes (su hay ne Menge, con el Gemeinsamkeit ellos funkionieren no )
Como el Datenbank erstellt se (ha seine Richtigkeit, si todavía no disponible) y anschließend el Interpreter abschmiert, gehe Yo veces su de lo liegt al Rückgabewert.
El Doku a Función findet se hier: [...]
Saludo Christian
P.S. Hatte con dll´s bisher no wirklich viel al Hut ;)
Nutze el 11Sub12 |
|
|
| |
|
|
|
Andreas Miethe
| Das liegt no al Rückgabewert. El Dll nutzt CDECL-Aufrufkonventionen en lugar de 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 | Gracias, como wäre Yo en el Leben no en él gekommen
Der Code se ejecuta en me por desgracia, no. |
|
|
| |
|
|
|
Andreas Miethe
| Hast Usted Usted el Beispiele de Uwe Pascal Niemeier veces runtergeladen ?
Funktioniert en me wunderbar.
Ejemplo : KompilierenMarcaSeparación $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&)
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 tener Yo übersehen. Gracias, funktioniert. |
|
|
| |
|
|
|
RGH | El Geschichte ha mich daran erinnert, dass Yo ya länger vorhatte, en XProfan auch CDECL a unterstützen. Ab el nächsten Subscriptionsversion funktioniert folgender Code: KompilierenMarcaSeparaciónDeclare hDLL&, hDB&, Ergebnis&, Pointer&, err&, col&, row&
Set(CallConv, CDECL)
hDLL&=UseDll(sqlite3.dll)
importfunc(hDLL&,sqlite3_open,db_open)
importfunc(hDLL&,sqlite3_exec,db_exec)
importfunc(hDLL&,sqlite3_close,db_close)
importfunc(hDLL&,sqlite3_free,db_free)
importfunc(hDLL&,sqlite3_free_table,db_free_table)
importfunc(hDLL&,sqlite3_get_table,db_get_table)
PROC dbError
parameters e&
if e& <> 0
print string$(e&,0)
db_free(e&)
else
print OK
endif
ENDPROC
CLS
Datenbank öffnen
db_open(test.db,addr(hDB&))
dbError(err&)
Tabelle ggf. löschen
db_exec(hDB&,DROP TABLE buecher,0,0,addr(err&))
dbError(err&)
Tabelle erzeugen
db_exec(hDB&,CREATE TABLE buecher (titel CHAR(40), autor CHAR(40), preis NUMBER(5,2)),0,0,addr(err&))
dbError(err&)
Daten einfügen
db_exec(hDB&,INSERT INTO buecher VALUES (XProfan für Dummies,RGH-Soft,19.90),0,0,addr(err&))
dbError(err&)
db_exec(hDB&,INSERT INTO buecher (titel, autor) VALUES (Speed für Profaner,Frank Abbing),0,0,addr(err&))
dbError(err&)
Tabelle auslesen
db_get_table(hDB&,SELECT * FROM buecher,addr(Ergebnis&),addr(row&),addr(col&),addr(err&))
dbError(err&)
print col&; Spalten / ;row&; Zeilen
Pointer& = 0
whileloop 1, row& + 1
whileloop 1, col&
if long(Ergebnis&,Pointer&) > 0
print string$(long(Ergebnis&,Pointer&),0);
else
print get(SQLNULL);
endif
print get(SQLDEL);
Inc Pointer&, 4
endwhile
print
endwhile
db_free_table(hDB&, Ergebnis&)
waitinput
db_close(hDB&)
FreeDLL&
end
Neu es lediglich Conjunto(CallConv, CDECL).
Saludo 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 veces Por favor, alguien el Vorteil de cdecl? Und el 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 | Como fällt me spontan sólo eins una:
@JAC: [...] |
|
|
| |
|
|
|
Jac de Lad | Aha, ha also para el Ottonormalprofaner no 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 el ahora mehr dll´s nativ funkionieren como bisher.
@Roland: Was si uno mehrere dll´s en un Programa verwendet y una Teil su por cdecl y otro por stdcall trabajo? |
|
|
| |
|
|
|
Jac de Lad | Welche porque para Ejemplo? |
|
|
| 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 veces Por favor, alguien el Vorteil de cdecl? Und el Unterschiede? Und überhaupt???
Laienhaft ausgedrückt podría uno sagen en Asmebene hay no Características y no Funktionsparameter - lo son aber Sprungadressen y una Stack. Wenn uno ahora behauptet el Code hinter el Sprungadressen entspricht una Funktionscode Luego se el Stack como Parametermerker benutzt. Man legt (push) also Werte en el Stack y springt (call) entonces a uno Sprungadresse. Der Code detrás de él nimmt el Werte de Stack (pop) en esta a verarbeiten. Der Vollständigkeithalber podría uno erwähnen el una möglicher Rückgabewert uno solchen Función grundsätzlich en el eax-Register hinterlegt se bevor el Función por ret el Rücksprung veranlasst.
Ob stdcall oder cdecl legt hierbei z.B. el Reihenfolge fest con el el Werte vom Stack genommen voluntad. En cdecl voluntad el Params sólo en umgekehrter Reihenfolge a stdcall en el Stack gepackt.
Je después de con welcher Compileroption z.B. una DLL kompiliert wurde (oder como el asm gestrickt es) muss uno demnach con cdecl oder stdcall aufrufen. |
|
|
| |
|
|