[ANSI-C]: Kapselung von mySQL in Header-File

Arne Buchwald

Erfahrenes Mitglied
Hallo,

eine normale mySQL-Datenbankabfrage aus einem .c-File habe ich zum Laufen gebracht, jedoch muss ich aus recht vielen Dateien einen mySQL-Zugriff realisieren.
Jetzt stellt sich für mich das Problem, dass die Zugangsdaten aus einer Datei geparst werden müssen und ich das mySQL-Objekt aus einer .c-Datei den anderen .c-Dateien zur Verfügung stellen möchte (also über das Header-File zugänglich).

Hat das jemand schon einmal gemacht? Kennt jemand eine Seite mit entsprechendem Snipplet oder hat Quellcode, aus dem ich mir mein oben beschriebenes Ziel zusammenkopieren kann? Google konnte mir da leider nicht so recht weiterhelfen.


Vielen Dank :)
 
Äh sorry, aber kannst du das jetzt mal bischen genauer erklären? Evtl. ein kleines Beispiel, oder wo genau du nicht weiterkommst.

Gruß Homer
 
foo.c:
.....
/* Default Module einbinden */
#include <stdio.h>
#include <mysql.h>
......
......
MYSQL *mysql;

/* Funktions Prototypen */
void connect_mysql();
void close_mysql();
void select_mysqldb();
void check_mysql_error();
void usage();
MYSQL_RES *dbquery(char *sql);

Auf dieses mySQL-Objekt als auch auf die Funktionen muss ich aus einer anderen .c-Datei zugreifen können:

foo2.c:
res = mysql_store_result(mysql);
while ((sql_row = mysql_fetch_row (res)) != NULL)
{
......
}

Aber das kann in der foo2.c auch nicht klappen, da jemand keinerlei Hinweise auf foo.c vorhanden sind.

Bei obigem Beispiel komme ich nicht weiter. :(
 
Also normalerweiße sollten ja Funktionsprototypen in einer Headerdatei (.h) stehen, dann kannst du die von "foo2.c" includieren.
Alternativ kannst du auch das Schlüsselwort "extern" verwenden, eine schöne Erklärung hierzu findest du in der MSDN

Gruß Homer
 
Du haust die Funktionsprototypen wie Daniel schon gesagt hat in die Header und die Variable die du austauschen möchtest ebenfalls, als static deklariert dürfte es gehen, für größere Mengen musst du eh mit nem Zeiger arbeiten und der Speicher ist ja logischerweise für beide C-Dateien der selbe. Dann includest du die Header in beiden C-Dateien und dann kennen beide C-Dateien die gleichen Prototypen und Variablen.
 
Zurück