Also Interfaces würde ich ja auch benutzen. Das steht außer Frage. Nur stehe ich auf dem Schlauch, was das Abrufen von Ergebnissen vom
SQL-Server und das Übergeben der Ergebnisse an die Anwendung angeht. Innerhalb meiner Anwendung würde ich die Ergebnisse gerne in Form eines Objektes zwischenspeichern. Um mal bei den Benutzern zu bleiben als Instanz bzw. mehrere Instanzen eines TUser Objektes.
Wäre es sinnvoll so etwas zu tun? Nur mal als Beispiel und hier im Editor runtergetippt.
Delphi-Quellcode:
IUserExchanger = interface(IInterface)
procedure AddNewUser(const Username: string; FirstName: string; LastName: string);
procedure AddUserGroup(const ID: Integer; const Name: string);
[...]
end;
Die
DLL Exportiert dann eine Funktion GetUsers oder wahlweise auch GetInstance die als Parameter eine Instanz eines IUserExchanger Objektes erwartet.
Delphi-Quellcode:
IUserInterface = interface(IInterface)
procedure GetUsers(UserExchanger: IUserExchanger);
end;
Delphi-Quellcode:
TUserExchanger = class(TInterfacedObject, IUserExchanger)
private
FUsers: TObjectList<TUser>;
User: TUser;
public
procedure AddNewUser(const Username: string; FirstName: string; LastName: string);
procedure AddUserGroup(const ID: Integer; const Name: string);
end;
implementation
procedure TUserExchanger.AddNewUser(const Username: string; FirstName: string; LastName: string);
begin
User := TUser.Create;
User.UserName := UserName;
User.FirstName := FirstName;
User.LastName := LastName;
FUsers.Add(User);
end;
procedure TUserExchanger.AddUserGroup(const ID: Integer; const Name: string);
begin
User.Groups.Add(ID, Name);
end;
Nur mal so ein Gedanke. Falls da etwas unklar sein sollte, dann versuche ich gerne es etwas besser zu beschreiben.
Macht man so etwas oder gibt es da Nachteile? Laut Zacherl wäre es ja auch mittlerweile kein Problem mehr, Strings direkt auszutauschen. Beide Anwendungen die darauf zugreifen sind in Delphi geschrieben.
Wenn das doch nicht gehen sollte, würde dann so etwas funktionieren? Bitte auf das PChar achten. Das Interface habe ich hierfür nicht extra noch einmal geschrieben.
Delphi-Quellcode:
procedure TUserExchanger.AddUserGroup(const ID: Integer; const Name: PChar);
var
LName: string;
begin
LName := Name;
User.Groups.Add(ID, LName);
end;