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?


  • Administrator

    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


Log in to reply