FireDAC.DLLSharing Sample

From RAD Studio Code Examples
Jump to: navigation, search

This sample shows how to use FireDAC in the dynamic-link libraries.

Location

You can find the DLLSharing sample project at:

  • Start | Programs | Embarcadero RAD Studio Sydney | Samples and then navigate to:
    • Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDConnection\DLL_Sharing
  • Subversion Repository:
    • You can find Delphi code samples in GitHub Repositories. Search by name into the samples repositories according to your RAD Studio version.

Description

The DLLSharing sample shows how to use FireDAC in the dynamic-link libraries. To this end, the sample uses the CliHandle and SharedCliHandle properties of the TFDConnection class.

How to Use the Sample

  1. Navigate to the location given above and open Project1.dproj.
  2. Press F9 or choose Run > Run.

Files

File in Delphi Contains

Project1.dproj
Project1.dpr

The project itself.

Unit1.pas
Unit1.fmx

The main form.

Project2.dproj
Project2.dpr

The DLL.

Unit2.pas
Unit2.fmx

The DLL form.

Implementation

The sample uses FireDAC to implement a connection with a dynamic-link library. To this end, the sample implements three buttons named: Button1, Button2 and Button3. Each button handles a OnClick event to implement the following features:

  • Load a DLL
  • Show data
  • Unload the DLL

Load DLL

To transfer a connection between an application and a DLL, the sample transfers the TFDCustomConnection.CliHandle property value to the DLL. The handle must be assigned to the TFDCustomConnection.SharedCliHandle property.

After the TFDCustomConnection.SharedCliHandle is assigned, the DLL connection can be activated by setting the Connected property to True. Note that there is no need to set up a connection definition, including DriverID.

  // Application code:
  FhDll: THandle; 
  // ...
  procedure TForm1.Button1Click(Sender: TObject);
  begin
    FhDll := LoadLibrary(PChar('Project2.dll'));
    @FpShowData := GetProcAddress(FhDll, PChar('ShowData'));
  end
 
  // DLL code:
  class procedure TForm2.ShowData(ACliHandle: Pointer);
  var
    oForm: TForm2;
  begin
    oForm := TForm2.Create(Application);
    oForm.FDConnection1.SharedCliHandle := ACliHandle;
    oForm.FDConnection1.Connected := True;
    oForm.FDQuery1.Active := True;
    oForm.Show;
  end;

Show data

Then, the connection can be used as a normal database connection:

  TShowDataProc = procedure (ACliHandle: Pointer); stdcall; 
  // ...
  FpShowData: TShowDataProc;
  // ...
  procedure TForm1.Button3Click(Sender: TObject);
  begin
    FpShowData(FDConnection1.CliHandle);
  end

Unload DLL

To unload the dynimic-link library, the sample implements the following code:

  TShutdownProc = procedure; stdcall;
  // ... 
  FpShutdown: TShutdownProc;
  // ...
  procedure TForm1.Button2Click(Sender: TObject);
  begin
    FpShutdown();
    FreeLibrary(FhDll);
  end;

Uses

See Also

Samples