![]() |
C: Callback Funktion aus DLL verlagern
Hi,
nächstes Problem: Ich habe eine Funktion deschrieben, die Parameter an Sqlite weitergibt. Unter anderem auch eine Callbackfunktion. Jetzt möchte ich die Callbackroutine aus der DLL raus haben. Die Callbackroutine soll im Delphi Programm stehen. das problem ist, dass ich die Callbackadresse irgendie weitergeben muss! Wie kann ich das machen?
Code:
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i; for(i=0; i<argc; i++){ // printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } extern "C" __declspec( dllexport ) void QtTestDll_Sqlite(char* Database,char* SQL_string) { sqlite3 *db; char *zErrMsg = 0; int rc; TCHAR Inhalt[101]; rc = sqlite3_open(Database, &db); if( rc ){ //Fehlermeldung ausgeben. Wird noch implementiert. sqlite3_close(db); exit(1); } wtoci(Inhalt,SQL_string,sizeof(SQL_string)); rc = sqlite3_exec(db,SQL_string,callback, NULL, &zErrMsg); if( rc!=SQLITE_OK ){ //Erfolgsmeldung wird noch implementiert. sqlite3_free(zErrMsg); } sqlite3_close(db); // } Grüsse Rainer |
Re: C: Callback Funktion aus DLL verlagern
Du übergibst ihn einfach als 32 bit- Pointer (void*)
|
Re: C: Callback Funktion aus DLL verlagern
Hi Sirius,
das hab ich schon versucht.
Code:
Compiler meckert:
extern "C" __declspec( dllexport ) void QtTestDll_Sqlite(char* Database,char* SQL_string, void* ptr)
{ sqlite3 *db; char *zErrMsg = 0; int rc; TCHAR Inhalt[101]; rc = sqlite3_open(Database, &db); if( rc ){ //Fehlermeldung ausgeben //fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } wtoci(Inhalt,SQL_string,sizeof(SQL_string)); rc = sqlite3_exec(db,SQL_string,ptr, NULL, &zErrMsg);<--------hier meckert Compiler wegen ptr if( rc!=SQLITE_OK ){ //fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sqlite3_close(db); // } rtest.cpp:77: error: invalid conversion from 'void*' to 'int (*)(void*, int, char**, char**)' rtest.cpp:77: error: initializing argument 3 of 'int sqlite3_exec(sqlite3*, const char*, int (*)(void*, int, char**, char**), void*, char**)' Wenn ich noch irgendeine Idee hätte hätte ich diesen Thread nicht eröffnet. Grüsse Rainer |
Re: C: Callback Funktion aus DLL verlagern
So viel C habe ich noch nie gemacht, aber wenn du vielleicht das hier probierst:
Code:
Edit: Ok, geht nicht durch den Compiler...
[s]extern "C" __declspec( dllexport ) void QtTestDll_Sqlite(char* Database,char* SQL_string,
int (*)(void*, int, char**, char**) ptr)[/s] |
Re: C: Callback Funktion aus DLL verlagern
Hi,
sieht so aus als wenn der Typecast von C++ verhindert wird. Ich nutze QT4. Werde das Ganze nochmal mit PellsC versuchen. Grüsse Rainer |
Re: C: Callback Funktion aus DLL verlagern
Hi,
das Problem ist gelöst. Sobald ich fertig bin werde ich das Ganze hier einstellen! Grüsse Rainer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz