Es gibt mehrere Möglichkeiten:
- *.lib der DLL einbinden (einfachster Fall):
- Den BCB Menüpunkt ‚Projekt->Dem Projekt hinzufügen …‘ wählen und die zur DLL zugehörige DLL-Libary (*.lib) ins Projekt einbinden
- falls keine *.lib existiert müssen die DLL-Funktionen mehr oder weniger mit Hand exportiert werden
- falls ein Header-File existiert in dem die Export-Funktionen definiert sind, die *.h mit #include „dllheadername.h“ in die entsprechende *.cpp includieren
- Beispiel für eine solche Headerdatei (dllheader.h):
- existiert kein Header-File, so wurden häufig vom DLL-Programmierer die Export-Funktionen schon fertig in der DLL-cpp festgelegt, wie in folgendem Quellcode demonstriert:
- Diese vorher definierten Funktionen müssen dann entprechend in der *.cpp der Programmes, das die DLL-Funktionen nutzen soll, importiert werden:
- Aufruf der exportierten DLL-Funktionen im Anwendungs-Quellcode:
#ifndef dllheaderH #define dllheaderH extern "C" __declspec(dllexport) int Funktion1(int *); extern "C" __declspec(dllexport) bool Funktion2(float *, int *); extern "C" __declspec(dllexport) DWORD Funktion3(float *,BYTE *); #endif
//---------------------------------------------------------------------------
// fiktiver Quellcode der DLL
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) int Funktion1(int *);
extern "C" __declspec(dllexport) bool Funktion2(float *, int *);
extern "C" __declspec(dllexport) DWORD Funktion3(float *,BYTE *);
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
.
.
.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//Funktionen, die aus der DLL importiert werden
extern "C" __declspec(dllimport) int Funktion1(int *);
extern "C" __declspec(dllimport) bool Funktion2(float *, int *);
extern "C" __declspec(dllimport) DWORD Funktion3(float *,BYTE *);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
.
.
.
.
.
.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int Wert1;
DWORD Wert2;
Wert1=Funktion1(10);
if (Funktion2(4.5, 12)) ShowMessage("Test");
Wert2=Funktion3(1.5, 0);
}
.
.
.