AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C: Callback Funktion aus DLL verlagern
Thema durchsuchen
Ansicht
Themen-Optionen

C: Callback Funktion aus DLL verlagern

Ein Thema von R2009 · begonnen am 20. Dez 2009 · letzter Beitrag vom 21. Dez 2009
Antwort Antwort
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

C: Callback Funktion aus DLL verlagern

  Alt 20. Dez 2009, 10:22
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
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: C: Callback Funktion aus DLL verlagern

  Alt 20. Dez 2009, 10:57
Du übergibst ihn einfach als 32 bit- Pointer (void*)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#3

Re: C: Callback Funktion aus DLL verlagern

  Alt 20. Dez 2009, 11:19
Hi Sirius,
das hab ich schon versucht.

Code:
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);

   //
}
Compiler meckert:
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
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: C: Callback Funktion aus DLL verlagern

  Alt 20. Dez 2009, 12:09
So viel C habe ich noch nie gemacht, aber wenn du vielleicht das hier probierst:
Code:
[s]extern "C" __declspec( dllexport ) void QtTestDll_Sqlite(char* Database,char* SQL_string,
int (*)(void*, int, char**, char**) ptr)[/s]
Edit: Ok, geht nicht durch den Compiler...
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#5

Re: C: Callback Funktion aus DLL verlagern

  Alt 20. Dez 2009, 15:43
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
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#6

Re: C: Callback Funktion aus DLL verlagern

  Alt 21. Dez 2009, 11:19
Hi,
das Problem ist gelöst.
Sobald ich fertig bin werde ich das Ganze hier einstellen!

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz