- 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);
}