Mam aplikację, która ładuje BPL, że wewnątrz prostego formularza.Dostęp do publicznych metod i właściwości wewnątrz Delphi BPL
Ten formularz jest opcjonalną opcją głównej aplikacji.
BPL ładuje się prawidłowo, formularz jest wyświetlany poprawnie, ale nie wiem, jak uzyskać dostęp do publicznych metod i właściwości formularza wewnątrz pliku bpl.
Czy ktoś może podać prosty przykład?
mój kod:
// Load the BPL on aplication Load
LoadPackage('About.bpl');
// CAll for TForm1 inside the About.BPL
var
AClass: TClass;
AForm: TForm;
begin
AClass := GetClass('TForm1');
if AClass <> nil then
begin
Application.CreateForm(TComponentClass(AClass), AForm);
AForm.Show;
end;
// The unit TForm1 inside the BPL package
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
PublicMthd;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure TForm1.PublicMthd;
Begin
ShowMessage('Inside call');
End;
initialization
RegisterClass(TForm1);
finalization
UnRegisterClass(TForm1);
end.
Jak mogę uzyskać dostęp do "PublicMthd" w TForm1?
Pokaż nam, jak wygląda twój kod. Istnieje wiele sposobów ładowania plików BPL, a odpowiedź będzie zależeć od tego, jak to robisz. –
Zobacz także to pytanie SO: [wykonaj-a-metoda-z-formularza-utworzonego przez-klasy-odniesienia-delphi] (http://stackoverflow.com/questions/2991934/execute-a-method-from -a-form-by-klasa-referencja-delphi) –
Czy napisałeś tę BPL? Dlaczego nie wyeksportować funkcji o nazwie GetMainForm, a następnie wywołać funkcję "GetMainForm: TForm", a następnie można uzyskać do niego dostęp?Czy istnieje powód, dla którego nie można zastosować podejścia opartego na zdrowym rozsądku? Co zamierzacie zrobić, gdy znacie klasy i możecie je wyliczyć, a może nawet stworzyć ich instancje? Czy istnieje powód, dla którego nie określasz interfejsu IPluginInterface, który pasuje do domeny twojego problemu, zamiast przechodzić bezpośrednio do podstawowych typów klas z głównej aplikacji? –