DLLs zur Designzeit in ein Projekt einbinden

Es gibt mehrere Möglichkeiten:

  1. *.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
  2. 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):
    #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
    
    • 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:
    //---------------------------------------------------------------------------
    // 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;
    }
    //---------------------------------------------------------------------------
    
    .
    .
    .
    
    • Diese vorher definierten Funktionen müssen dann entprechend in der *.cpp der Programmes, das die DLL-Funktionen nutzen soll, importiert werden:
    //---------------------------------------------------------------------------
    #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)
    {
    }
    
    .
    .
    .
    
  3. Aufruf der exportierten DLL-Funktionen im Anwendungs-Quellcode:
  4. .
    .
    .
    
    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);
    }
    
    .
    .
    .