Ich lese das Buch von Nick Hodges "Codierung in Delphi" und ich versuche, die Verwendung der Schnittstelle zu verstehen. In einer Einheit habe ich Asimple Schnittstelle setzen:Versuchen Sie, Delphi Interfaces zu verstehen
unit INameInterface;
interface
type
IName = interface
['{CE5E1B61-6F44-472B-AE9E-54FF1CAE0D70}']
function FirstName: string;
function LastName: string;
end;
implementation
end.
und in einer anderen Einheit habe ich die Implementierung dieser Schnittstelle setzen, nach dem Buch Beispiel:
unit INameImplementation;
interface
uses
INameInterface;
type
TPerson = class(TInterfacedObject, IName)
protected
function FirstName: string;
function LastName: string;
end;
implementation
{ TPerson }
function TPerson.FirstName: string;
begin
Result := 'Fred';
end;
function TPerson.LastName: string;
begin
Result := 'Flinstone';
end;
end.
An dieser Stelle ich Ich habe eine einfache VCL-Formularanwendung erstellt, um das von mir erstellte Objekt zu verwenden. Der Formularcode lautet wie folgt:
unit main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls, INameImplementation;
type
TfrmMain = class(TForm)
lblFirtName: TLabel;
lblLastName: TLabel;
txtFirstName: TStaticText;
txtLastName: TStaticText;
btnGetName: TButton;
procedure btnGetNameClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Person: TPerson;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
txtFirstName.Caption := '';
txtLastName.Caption := '';
end;
procedure TfrmMain.btnGetNameClick(Sender: TObject);
begin
txtFirstName.Caption := ...
end;
end.
Meine Frage ist das: Wie kann ich die Schnittstelle verwenden? Die beiden Funktionen sind als geschützt deklariert, also wie kann ich über das Formular darauf zugreifen? Ich muss sie als öffentlich definieren oder sollte ich die INAMEInterface-Schnittstelleneinheit verwenden? Ich bin schrecklich verwirrt über Schnittstellen !!!
Eros
Ein großartiges Beispiel dafür, wie Schnittstellen verwendet werden ... Angenommen, Sie haben eine DLL mit einem Objekt darin, das Sie auch im aufrufenden Prozess verwenden möchten. Sie können Objekte nicht über die DLL-Grenzen hinweg übergeben, aber Sie können Schnittstellen übergeben (sofern die Elemente auch sicher sind, z. B. WideString anstelle von String). Dann instanziieren Sie das Objekt innerhalb der DLL und übergeben eine Schnittstellenreferenz dieses Objekts von der DLL zurück an die aufrufende Anwendung - dann kann die aufrufende Anwendung mit dieser Schnittstelle auf die gleiche Weise interagieren, als ob Sie das Objekt direkt aufrufen würden. –
@Jerry Das ist eher ein Implementierungsproblem mit binären Interop. Ich denke, Schnittstellen sind ein tieferes Konzept. –