Autor Beitrag
Hack Gott
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 409

Windows Vista
Delphi 2005 Personal, Delphi 7
BeitragVerfasst: Di 05.08.08 17:14 
Ich würde gerne eine GroupBox, die ich in Unit2 der DLL liegen habe an meine Anwendung übergeben... Ausprobiert habe ich folgendes:

DLL
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function Settings: TGroupBox; stdcall;
begin
  Result.Assign(Form2.GroupBox1.Create(nil));
end;


und in der Anwendung
ausblenden Delphi-Quelltext
1:
GroupBox1.Assign(Unit1.Settings);					


Die DLL wird dynamisch eingebunden, andere Funktionen klappen aber.

Das Kompilieren klappt, nur wenn ich die Anwendung dann ausführe und das Ereignis auslöse, kommt eine Zugriff verweigert Fehlermeldung.

Was mache ich falsch/Was muss ich ändern?

Ach und außerdem, werden dabei eigentlich auch die Komponenten in der GroupBox in der DLL übergeben, also beispielsweise 2 Buttons?

[Gibt es Alternative zu dieser Möglichkeit? (nur falls das so nicht klappen sollte)]

_________________
"Je mehr Käse, desto mehr Löcher; Je mehr Löcher, desto weniger Käse. Daraus folgt: Je mehr Käse desto weniger Käse!"
Knulli
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 2

Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
BeitragVerfasst: Do 11.09.08 14:27 
Schon mal versucht, die Groupbox per Referenz zu übergeben?

DLL:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
library DllTest2;
uses
  SysUtils,
  Classes,
  DllTest3 in 'DllTest3.pas' {Form2};
{$E .DLL}
{$R *.res}
exports
  ZeigeFenster,
  GibFrame,
  GibKlasse;
begin
  Form2 := DllTest3.TForm2.Create(Nil);
end.

und
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
unit DllTest3;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm2 = class(TForm)
    GroupBox1: TGroupBox;
    Button1: TButton;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
var
  Form2: TForm2;
procedure ZeigeFenster();
function  GibFrame(): TGroupBox;
function  GibKlasse(): TClass;
implementation
{$R *.dfm}
procedure ZeigeFenster();
begin
  Form2.Show();
end;
function GibFrame(): TGroupBox;
begin
  Result := Form2.GroupBox1;
end;
function GibKlasse(): TClass;
begin
  Result := TForm2;
end;
end.


EXE:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
unit DllTest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btnZeigeFenster: TButton;
    btnGibBox: TButton;
    procedure btnZeigeFensterClick(Sender: TObject);
    procedure btnGibBoxClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

procedure ZeigeFenster();        stdcall;
function  GibFrame(): TGroupBox; stdcall;
function  GibKlasse(): TClass;   stdcall;

implementation
{$R *.dfm}

procedure ZeigeFenster; external 'DllTest2.dll';
function  GibFrame;     external 'DllTest2.dll';
function  GibKlasse;    external 'DllTest2.dll';

procedure TForm1.btnZeigeFensterClick(Sender: TObject);
begin
  ZeigeFenster();
end;

procedure TForm1.btnGibBoxClick(Sender: TObject);
var
  GroupBox: TGroupBox;
  Objekt: TObject;
  i: Integer;
begin
  GroupBox := GibFrame();
  GroupBox.Caption := 'Alles *mist*e, Deine Elli';

  for i := 0 to GroupBox.ControlCount-1 do
  begin
    Objekt := GroupBox.Controls[i];
    if Objekt.ClassName = 'TButton' then
      TButton(Objekt).Caption := 'Hugo';
  end;
end;

end.


mfg Knulli