Hola Eduardo.
Sobre tu consulta (usando
COPYDATASTRUCT), tratándose de un
TComponent, lamentablemente creo nos deja en una situación similar a la anterior por los motivos explicados.
Pero, aunque de forma mas compleja que con
TFileStream, se pueden pasar los datos de la instancia, un ejemplo:
Aplicación emisora:
Código Delphi
[-]
...
type
TfrmEmisor = class(TForm)
Button1: TButton;
Database1: TDatabase;
procedure Button1Click(Sender: TObject);
private
public
end;
var
frmEmisor: TfrmEmisor;
implementation
type
TDBRegister = packed record
AliasName : string[255];
Connected : Boolean;
DatabaseName : string[255];
DriverName : string[255];
Exclusive : Boolean;
end;
procedure TfrmEmisor.Button1Click(Sender: TObject);
var
CDS : COPYDATASTRUCT;
H : HWND;
R : TDBRegister;
begin
with Database1 do
begin
R.AliasName := AliasName;
R.Connected := Connected;
R.DatabaseName := DatabaseName;
R.DriverName := DriverName;
R.Exclusive := Exclusive;
end;
H := FindWindow(PChar('TfrmRecept'),PChar('TITULO'));
try
CDS.dwData := 0;
CDS.cbData := SizeOf(R);
CDS.lpData := @R;
SendMessage(H, WM_COPYDATA, Integer(Handle), Integer(@CDS));
finally
CloseHandle(H);
end;
end;
end.
Aplicación receptora:
Código Delphi
[-]
...
type
TfrmRecept = class(TForm)
Database1: TDatabase;
Memo1: TMemo;
private
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
public
end;
var
frmRecept: TfrmRecept;
implementation
type
TDBRegister = packed record
AliasName : string[255];
Connected : Boolean;
DatabaseName : string[255];
DriverName : string[255];
Exclusive : Boolean;
end;
procedure TfrmRecept.WMCopyData(var Msg: TWMCopyData);
const
BOOLVALUE : array[Boolean] of string = ('False','True');
begin
with TDBRegister(Msg.CopyDataStruct.lpData^) do
begin
Database1.AliasName := AliasName;
Database1.Connected := Connected;
Database1.DatabaseName := DatabaseName;
Database1.DriverName := DriverName;
Database1.Exclusive := Exclusive;
end;
with Memo1 do
begin
Clear;
Lines.Add('AliasName : '+ Database1.AliasName);
Lines.Add('Connected : '+ BOOLVALUE[Database1.Connected]);
Lines.Add('DatabaseName: '+ Database1.DatabaseName);
Lines.Add('DriverName : '+ Database1.DriverName);
Lines.Add('Exclusive : '+ BOOLVALUE[Database1.Exclusive]);
end;
end;
end.
También tomá en cuenta implementar la opción que te sugiere
cloayza.
Saludos.