Verwenden von Datenbankkomponenten in einer DLL

  • Um Datenbankkomponenten in einer DLL verwenden zu können, muss im DLL-Projekt eine Form (zur Laufzeit erzeugt!) mit den Datenbankkomponenten vorhanden sein.
  • BCB starten und im Menü ‘Datei->Neu->DLL Experte’ wählen
  • Datei->Neu->Neues Formular wählen
  • auf das Formular die benötigten Datenbankkomponenten ziehen (im hier vorliegenden Bsp. wird mit den MySQLDAC-Komponenten gearbeitet, es funktioniert aber auch mit beliebigen anderen)
  • *.cpp der DLL (nicht die der Form!):
  • #include <vcl.h>
    #include <stdio.h>
    #include <windows.h>
    #pragma hdrstop
    #include "DLLDBForm.h"
    //---------------------------------------------------------------------------
    //USEFORM("DLLDBForm.cpp", frmDLLDBForm);
    //---------------------------------------------------------------------------
    //Funktion die exportiert wird
    //---------------------------------------------------------------------------
    extern "C" __declspec(dllexport) int ExportDBValue();
    
    #pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
        return 1;
    }
    
    int ExportDBValue()
    {
        int iReturnWert; // Rückgabewert
    
        TfrmDLLDBForm *DBForm = new TfrmDLLDBForm(NULL); // Form zur Laufzeit erzeugen
    
        DBForm->mySQLQuery1->Close();
        DBForm->mySQLQuery1->SQL->Clear();
        DBForm->mySQLQuery1->SQL->Add("select id from table");
        DBForm->mySQLDatabase1->Open();
        DBForm->mySQLQuery1->Open();
    
        DBForm->ShowModal(); // Form zum Test mit anzeigen
    
        // Beispiel-int-Wert aus Spalte "id" lesen
        iReturnWert = DBForm->mySQLQuery1->FieldByName("id")->AsInteger;
    
        delete DBForm; // Form nach der Benutzung wieder zerstören!!!
    
        return iReturnWert; // Wert zurückgeben
    }
    
  • *.lib der DLL in das Projekt einbinden, in dem die DLL verwendet werden soll
  • *.cpp eines Beispielprogrammes, das die Funktion ExportDBValue() der DLL aufruft:
  • #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    
    TForm1 *Form1;
    //Funktion, die aus der DLL importiert wird
    extern "C" __declspec(dllimport) int ExportDBValue();
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
    {
    }
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        int r;
        r = ExportDBValue();
        Edit1->Text = IntToStr(r);
    }