Osnovni program je u D2007, a DLL-ove radim sa XE 10.1
Sada bi mi bilo zgodno cijelu jednu klasu prebaciti u DLL. Koliko je to pametno i kako pristupiti propery-ima?
Mislio sam kreirati Interface. Definirati ga u DLL-u i Osnovnom programu.
Pretpostavljam da property koji je string i dalje moram slati kao PCHar ili mogu:
Code:
NekiInterface.StringProperty := 'Neki moj string';
NekiInterface.StringProperty := 'Neki moj string';
Molio bih savjet ako je netko do sada to radio. Da li se upoće upuštati u to? Ako je komplicirano, koristit ću txt file u kom ću slati DLL-u potrebne podatke.
Iz te klase u DLL-a ne vraćam podatke, koristim ga kreiranje izvješća i neke ispise. FastReport je bolji od QR-a, pogotovo za tekstove i poravnanja, a moji klijetni pate na "lijep izgled". Te poravnato lijevo, te pravnato desno, te malo gore, te malo dolje...
Evo što sam pronašao:
DLL:
Code:
library StringFunctions;
uses
StringFunctions_IntfU; // use Interface-Deklaration
{$R *.res}
type
TStringFunctions = class( TInterfacedObject, IStringFunctions )
protected
function CopyStr( const AStr : WideString; Index : Integer; Count : Integer ) : WideString;
end;
{ TStringFunctions }
function TStringFunctions.CopyStr( const AStr : WideString; Index, Count : Integer ) : WideString;
begin
Result := Copy( AStr, Index, Count );
end;
function GetStringFunctions : IStringFunctions; stdcall; export;
begin
Result := TStringFunctions.Create;
end;
exports
GetStringFunctions;
begin
end.
library StringFunctions;
uses
StringFunctions_IntfU; // use Interface-Deklaration
{$R *.res}
type
TStringFunctions = class( TInterfacedObject, IStringFunctions )
protected
function CopyStr( const AStr : WideString; Index : Integer; Count : Integer ) : WideString;
end;
{ TStringFunctions }
function TStringFunctions.CopyStr( const AStr : WideString; Index, Count : Integer ) : WideString;
begin
Result := Copy( AStr, Index, Count );
end;
function GetStringFunctions : IStringFunctions; stdcall; export;
begin
Result := TStringFunctions.Create;
end;
exports
GetStringFunctions;
begin
end.
Main prog:
Code:
uses
StringFunctions_IntfU; // use Interface-Deklaration
// Static link to external function
function GetStringFunctions : IStringFunctions; stdcall; external 'StringFunctions.dll' name 'GetStringFunctions';
procedure TMainView.Button1Click( Sender : TObject );
begin
Label1.Caption := GetStringFunctions.CopyStr( Edit1.Text, 1, 5 );
end;
uses
StringFunctions_IntfU; // use Interface-Deklaration
// Static link to external function
function GetStringFunctions : IStringFunctions; stdcall; external 'StringFunctions.dll' name 'GetStringFunctions';
procedure TMainView.Button1Click( Sender : TObject );
begin
Label1.Caption := GetStringFunctions.CopyStr( Edit1.Text, 1, 5 );
end;
Po ovome mogu slati u DLL direktno string (Edit1.Text)?
Nije mi jasna funkcija u DLL-u "GetStringFunctions". Ne kreira li ona svaki put kad se pozove s novim ili drugim parametrom ponovno objekt od TStringFunctions?