Advanced  Services Objektorientierter Zugriff auf MySQL Back Next Up Home

Erstellung einer DLL- und einer LIB-Datei für den objektorientierter Zugriff mit C++ auf MySQL (VS 2005)

Die folgende Anleitung beschreibt die Erzeugung einer DLL und einer LIB unter Windows mit Visualstudio 2005 aus den CPP-Quelldateien die man im Paket

mysql++-3.0.6.tar.gz von tangentsoft hier erhält.

Beim Entpacken entsteht u.a. ein Verzeichnis "\mysql++-3.0.6\lib" .

Zunächst wird ein neues leeres Projekt in VisualStudio 2005 angelegt. Wir nennen es "mysqlpp".

neuesprojekt01.jpg

Nun kopiert man sämtliche *.h und *.cpp aus "\mysql++-3.0.6\lib" in das Projektverzeichnis (...\Eigene Dateien\Visual Studio 2005\Projects\mysqlpp\mysqlpp) des neu angelegten Projekts.

Weiter im ProjektmappenExplorer. Auf "Quelldateien" gehen, mit rechter Maustaste Kontextmenu anzeigen lassen, "Hinzufügen" -> "Vorhandenes Element" wählen. Es erscheint ein Dateiauswahldialog, der sämtliche Dateien aus dem Projektverzeichnis anzeigt. Mit Ctrl a alles markieren und "Hinzufügen" wählen. Dabei erscheinen die Headerdateien auch unter den Quelldateteien, das ist aber egal.


Allgemeine Projekteinstellungen

Nun muß man die Projekteinstellungen vornehmen: Über "Projekt -> Eigenschaften" kommt man zu "Eigenschaftsseiten". Hier wählt man als Konfigurationseigenschaften Allgemein Konfigurationstyp "Dynamische Bibliothek".

screenshot01.jpg


Compilereinstellungen

Als nächstes wählt man C/C++ -> Allgemein an und trägt ein zusätzliches Includeverzeichnis ein, etwa "C:\Programme\MySQL\MySQL-Server-5.0\include", je nachdem welchen Pfad man für die MySQL-Installation gewählt hat. Der Eintrag unter "Debuginformationsformat" ist notwendig.

screenshot02.jpg

Unter "Optimierung" werden dann die folgenden Einstellungen vorgenommen:

screenshot03.jpg

folgende Präprozessordefinitionen werden als nächstes eingetragen:

_USRDLL
DLL_EXPORTS
_DEBUG
UNICODE
_UNICODE
MYSQLPP_MAKING_DLL
HAVE_MYSQL_SSL_SET


screenshot04.jpg

Unter "Codegenerierung" muß man die vier fettgedruckten Einstellungen vornehmen.

screenshot05.jpg

Alle weiteren Einstellungen werden nicht geändert. Hier die sich aus den Einstellungen ergebende Befehlszeile:

screenshot07.jpg

Mit diesen Einstellungen sollte sich die jede der CPP-Dateien kompilieren lassen. Man kann dies etwa mit der Datei "beemutex.cpp" ausprobieren.


Linkereinstellungen

Unter "Allgemein" muß der Pfad zur MySQL-C-Bibliothek angegeben werden:

C:\Programme\MySQL\MySQL-Server-5.0\lib\opt

screenshot08.jpg

Unter "Eingabe" werden bei "Zusätzliche Abhängigkeiten" die beiden folgenden Bibliotheken angegeben.

screenshot09.jpg

Unter "Befehlszeile" muß bei "Zusätzliche Optionen" nochmal der Name der C-Bibliothek eingetragen werden.

screenshot10.jpg

Mit diesen Einstellungen kann man das Projekt erstellen. Im Verzeichnis "DEBUG" findet man nach dem Erstellen die gewünschten Dateien "mysqlpp.dll" und "mysqlpp.lib" .

Wer sich die Mühe des Erstellens sparen will, kann die Dateien auch herunterladen. Hier können Sie die beiden Dateien in gepackter Form herunterladen.


Objektorientierter Zugriff, ein Beispielprogramm

Nach dem Erstellen der beiden Dateien können wir nun ein Projekt anlegen, das einen einfachen Zugriff auf MySQL demonstriert. Dazu legen wir eine "normale" main() enthaltende Konsolenanwendung an. Allerdings müssen wir auch hier einige Projekteinstellungen vornehmen.

Unter Compiler -> Allgemein -> Zusätzliche Include-Verzeichnisse muß auf die Header gezeigt werden, die die CPP-Deklarationen enthalten: "...\mysql++-3.0.6\lib" . Des weiteren muß immer noch auf die Header der C-Bibliothek gezeigt werden: "C:\Programme\MySQL\<MySQL-Dir>\include.

screenshot11.jpg

Damit läßt sich die das Programm compilieren, zum Linken muß aber noch die soeben erstellte Bibliothek bekanntgegeben werden.

Unter Linker -> Allgemein -> Zusätzliche Bibliotheks-Verzeichnisse trägt man den Pfad zur soeben erstellten Bibliothek "mysqlpp.lib" ein.

screenshot12.jpg

Unter Linker -> Befehlszeile -> Zusätzliche Optionen muß darüber hinaus der Name der Bibliothek angeben werden, hier "mysqlpp.lib".

screenshot13.jpg

Zum Schluß muß die zur Bibliothek gehörende DLL-Datei (mysqlpp.dll) ins Windowssystemverzeichnis kopiert werden: C:\WINDOWS\system32 .

Mit diesen einstellungen läuft das folgende Programm.

/*
    Das Programm stellt eine Verbindung zur Datenbank "test" von MySQL her und gibt eine Tabelle mit dem
    Namen "namen" auf die Konsole aus.
*/

#include "stdafx.h"

// das include mysql++.h includiert die folgenden
//#include "connection.h"
//#include "cpool.h"
//#include "query.h"
//#include "sql_types.h"
//#include "transaction.h"

#include "mysql++.h"

// hier werden nur gebraucht:
//#include "connection.h"
//#include "query.h"

int _tmain(int argc, _TCHAR* argv[])
{
    // Get database access parameters e.g. from command line
    const char* db = 0, *server = 0, *user = 0, *pass = "";


    mysqlpp::Connection conn("test", "localhost","root", "root", 3306) ;  // (conn(db, server, user, pass, port))

    if( conn.connected() )
    {
        printf("verbindung hergestellt\n");
    }
    else
    {
        printf("verbindung konnte nicht hergestellt werden:\n");
        printf("%s\n", conn.error() );
        return 1;
    }

    /*
    // variante zu obiger Verbindungsherstellung
    // verbindungsloses Connectionobjekt erstellen
    mysqlpp::Connection conn(false);
    // verbindungsversuch
    bool connected = conn.connect( "test", "localhost","root", "root", 3306) ;  // (conn.connect(db, server, user, pass, port))
    // port ist optional, wenn er weggelassen wird, wird 3306 als default genommen.

    if(connected)
    {
        printf("verbindung hergestellt\n");
    }
    else
    {
        printf("verbindung konnte nicht hergestellt werden:\n");
        printf("%s\n", conn.error() );
        return 1;
    }
    */

    mysqlpp::Query query = conn.query("SELECT * FROM namen");

    mysqlpp::StoreQueryResult result = query.store();

    if(result)
    {
        printf("num_rows = %d\n", result.num_rows());  // anzahl der zeilen im resultset
        printf("num_fields = %d\n", result.num_fields());  // anzahl der spalten im resultset

        for (size_t i = 0; i < result.num_rows(); i++)
        {
            for (size_t j = 0; j < result.num_fields(); j++)
            {
                printf(result[i][j]);
                printf("\t");
            }
            printf("\n");
        }
    }
    else
    {
        printf("kein resultset erhalten\n");  //
        printf("%s\n", query.error() );
    }

    return 0;
}
Valid XHTML 1.0 Strict top Back Next Up Home