Also für alle die es interessiert, mit den Funktionen und Prozeduren klappt es bereits, nur noch nicht mit den Variablen.
Entscheidend hierbei ist, dass man die Compilerfunktion {$M+} mit einbindet und zwar in alle Units die betroffen sind (Hauptformular, Wrapper und die Units selber).
Zu beachten ist, dass ich somit Funktionen und Prozeduren, deren Units vielleicht den gleichen Aufbau mit den Namen haben, dementsprechend umbenennen kann.
Test1
- gpInitialisierung -> gUTest1_gpInit;
Test2
- gpInitialisierung -> gUTest2_gpInit;
Unit FFrmMain:
Code: Alles auswählen
Unit FFrmMain;
{$mode objfpc}
{$H+}
{$M+}
Interface
Uses
Classes,
Controls,
Forms,
Graphics,
StdCtrls,
SysUtils,
pWrapper;
Type
{ TFFrmDat }
TFFrmDat = Class(TForm)
Procedure FormCreate(Sender : TObject);
Procedure FormClose(Sender : TObject;
Var CloseAction : TCloseAction);
Private
Public
End;
Var
FFrmDat : TFFrmDat;
Implementation
{$R *.lfm}
{ TFrmKasseDat }
Var
pUWrapper := TgWrapper.Create; //<-- Wird ausschließlich noch für die Variablen benötigt
Procedure TFrmKasseDat.FormCreate(Sender : TObject);
Begin
pWrapper.gUTest1_gpInit; // Initialisierung UTest1
pUWrapper.gUTest1.grLizenz := 0; //<-- Variableninitialisierung
End;
End.
Unit pWrapper:
Code: Alles auswählen
Unit pWrapper;
{$mode objfpc}
{$H+}
{$M+}
Interface
Uses
Classes,
SysUtils,
UTest1,
UTest2,
UTest3;
Type
{ TgWrapper }
TgWrapper = Class(TObject)
Private
Public
{ Öffentliche Objekte können überall da gesehen werden, wo die Klasse verwendet wird }
gUTest1 : TgTest1; //<-- Wird ausschließlich noch für die Variablen benötigt
gUTest2 : TgTest2; //<-- Wird ausschließlich noch für die Variablen benötigt
gUTest3 : TgTest3; //<-- Wird ausschließlich noch für die Variablen benötigt
// gUTest1_grLiz : grTLizenz; external name 'grLizenz';
Constructor Create;
Destructor Destroy; Override;
End;
// UTest1
Procedure gUTest1_gpInit; external name 'gUTest1_gpInit';
Function gUTest1_gpSQL(ugrSQLQuery : grTSQLQuery;
uStart_int : Integer = -1;
uEnde_int : Integer = -1) : grTSQLQuery; external name 'gUTest1_gpSQL';
// UTest2
Procedure gUTest2_gpInit; external name 'gUTest2_gpInit';
// UTest3
Procedure gUTest3_gpLiz(uStatus_str : String); external name 'gUTest3_gpLiz';
Var
pUWrapper : TgWrapper;
// gUTest1_grLiz : grTLizenz; // external name 'grLizenz';
Implementation
Constructor TgWrapper.Create;
Begin
Inherited Create;
End;
Destructor TgWrapper.Destroy;
Begin
Inherited Destroy;
End;
End.
Unit UTest1:
Code: Alles auswählen
Unit UTest1;
{$mode objfpc}
{$H+}
{$M+}
Interface
Uses
Classes;
Type
TLizenzRecord = Record
vName_str : AnsiString;
End;
grTLizenz = Array of TLizenzRecord;
Type
{ TgTest1 }
TgTest1 = Class(TObject)
Private
Public
grLizenz : grTLizenz;
Procedure gpInitialisierung(); [Alias: 'gUTest1_gpInit'];
Function gpSQL(ugrSQLQuery : grTSQLQuery;
uStart_int : Integer = -1;
uEnde_int : Integer = -1) : grTSQLQuery; [Alias: 'gUTest1_gpSQL'];
End;
Implementation
……