C-API Wrapper
-
Was ist und wie funktioniert der Wrapper genau?
Hier mal meine DB.h
#if !defined(AFX_DB_H__01343F15_530A_43C0_835E_AEE73860BDBC__INCLUDED_) #define AFX_DB_H__01343F15_530A_43C0_835E_AEE73860BDBC__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define __LCC__ #include <mysql.h> #include <iostream> class CDb { public: CDb(); virtual ~CDb(); int Connect(std::string aDbName); void Disconnect(); int Query(const char* aQuery); int Query(std::string aQuery); int GetRowCount(); char** GetRowData(); private: MYSQL mDb; MYSQL_RES* mResult; MYSQL_ROW mRow; }; #endif // !defined(AFX_DB_H__01343F15_530A_43C0_835E_AEE73860BDBC__INCLUDED_)
Was wir in den einzelnen Zeilen genau gemacht und was hat das mit dem Wrapper zu tun?
-
Was das mit einem C-API Wrapper zu tun hat, frage ich mich da auch gerade. Das ist eine "normale" C++ Header-Datei. In einer Header-Datei findet man zudem nur Definitionen, bei allen Funktionen fehlt der Bodyteil, aus der .cpp Datei.
Also was willst du genau wissen? Bzw. was weisst du schon, z.b. über C++?
Grüssli
-
Und ein Wrapper ist das vermutlich in dem Sinn, daß die einzelnen Klassenmethoden die API-Funktionen deiner Datenbank kapseln (genau wissen wir das natürlich nur, wenn wir die CPP sehen ;)).
-
#include "stdafx.h" #include "Projekt.h" #include "Db.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif CDb::CDb() {} CDb::~CDb() {} int CDb::Connect(std::string aDbName) { mysql_init(&mDb); if (!mysql_real_connect(&mDb, "localhost", "admin", "admin", aDbName.c_str(), MYSQL_PORT, NULL, 0)) { AfxMessageBox(mysql_error(&mDb)); return 0; } else return 1; } int CDb::Query(const char* aQuery) { if (mysql_real_query(&mDb, aQuery, (unsigned int)strlen(aQuery))) { AfxMessageBox(mysql_error(&mDb)); return 0; } mResult = mysql_store_result(&mDb); return 1; } int CDb::Query(std::string aQuery) { if (mysql_real_query(&mDb, aQuery.c_str(), aQuery.length())) { AfxMessageBox(mysql_error(&mDb)); return 0; } mResult = mysql_store_result(&mDb); return 1; } void CDb::Disconnect() { mysql_close(&mDb); } int CDb::GetRowCount() { return mysql_num_rows(mResult); } char** CDb::GetRowData() { mRow = mysql_fetch_row(mResult); return mRow; }
-
Wo ist das Problem? Das ist ein äußerst schlechter/primitiver MySQL C-API Wrapper ... d.h. die Funktionen der MySQL C-API werden von Funktionen einer Klasse aufgerufen usw.
-
Also ist der Wrapper das gesamtes Konstrukt und die Funktionen CDb::... gehören dazu?
-
Kurz: Ja
Lang: Hier findest du weitere Informationen: Wrapper, Hüllenklasse