Autor Beitrag
Savage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: Fr 26.12.03 23:59 
Hi @All

wie es der Titel schon sagt, ich bekomme es einfach nicht hin, einen Frame, die ich in eine DLL gepackt habe, in meinen Programm zu laden.
Weis jemand, wie ich es hinbekomme? Wenn ich ne ganze Form aus ner DLL verwende, öffne ich diese mit einer Procedure in der DLL, aber bei ner Frame funzt das ja leider nicht :(

Ich hoffe, ihr könnt mir weiterhelfen :)

mfg
Savage
Savage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: Do 01.01.04 18:10 
Titel: statisch funktioniert es jetzt aber dynamisch nicht...
Hi @all

ich habe es nun mit dem Frame hinbekommen, aber leider nur, wenn ich die DLL statisch lade und die Projekte (Hauptprogramm + DLL mit Laufzeitp. compiliere)

Ich hoffe, ihr könnt mir jetzt etwas weiter helfen.
Hier mal mein Source:

DLL mit Frame:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
library Project2;

uses
 sharemem, Windows,  SysUtils, Classes, Controls, StdCtrls,
  Unit1 in 'Unit1.pas' {Frame1: TFrame};

{$R *.RES}

var frame : TFrame1;

procedure delframe;stdcall;
begin
 frame.Destroy;
end;

Procedure showframe(h : twincontrol);stdcall;
begin
 frame := TFrame1.Create(nil);
 frame.Parent := h;
 frame.Left := 50;
 frame.Top := 70;
end;


Vom Statischen einlesen, was funktioniert:
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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
 Procedure showframe(h : twincontrol);stdcall;external 'Project2.dll';
 procedure delframe;stdcall;external 'Project2.dll';
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
 showframe(form1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 delframe
end;

end.


Und nun hier die dynamische Variante, wo ich eine Zugriffsverletzung bekomme :(

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:
unit Unit1;

interface

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

  type tshowframe = procedure(h : twincontrol);
 type tdelframe = procedure;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


var
  Form1: TForm1;
  showframe : TShowframe;
  delframe : TDelframe;
  funcptr : TFarProc;
  Dllhandle : THandle;
implementation
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
dllhandle := loadlibrary('Project2.dll');
funcptr := GetProcAddress(dllhandle,'showframe');
if funcptr <> nil then
 begin
   @showframe := funcptr;
   showframe(form1);
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
// delframe
end;

end.


Ich hoffe, einer von euch weis, wo der Fehler liegen könnte.

mfg
Savage

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Fr 02.01.04 08:10 
wo bekommst du denn die zugriffsverletzung?

Gruß
ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Savage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: Fr 02.01.04 10:55 
Die Zugriffsverletzung bekomme ich direkt nach:
showframe(form1);

warum, weiß ich noch immer nicht.

mfg
Savage
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Fr 02.01.04 11:18 
Bei der statischen Variante importierst du die Funktionen korrekt mit der Aufrufkonvention die du auch den Funktionen in der Dll verpasst hast -> stdcall

Bei der dynamischen Variante machst du keine Angaben zur Aufrufkonvention weshalb der Compiler die standardkonvention register nimmt...

2 Möglichkeiten: entweder in der Dll die stdcall löschen und auch auf register umsteigen, oder aber im Programm die Prozedur-Typen für den dyn. Import auch als stdcall deklarieren..

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Savage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 110



BeitragVerfasst: Fr 02.01.04 11:27 
thx Motzi,

an das stdcall hatte ich nun überhaupt nicht gedacht.
Jetzt funktioniert es endlich - DANKE :)

mfg
Savage
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 18.08.05 16:16 
hi.

*Kram* *Pust* *entstaub*

der Thread ist ja schon etwas älter, aber ich habe mich jetzt mal wieder mit der geschichte beschäftigt.

Ich habe mir jetzt auch eine kleine testapplikation geschrieben, allerdings bekomme ich beim anzeigen des frames aus der test-dll immer den Fehler "TFont kann nicht zu TFont zugewiesen werden." Kann mir wer sagen, wie ich das umgehen kann? Oder auch, was ich dagegen unternehmen kann?
@salvage: hast du das geschafft?

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
nitschchedu
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 02.05.06 11:08 
Hey Savage,
kannst du mir das ganze Projekt Posten? ich will das auch in der art machen doch leiter ist es mir noch nicht vergönnt.
ScripTrix
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 22.07.06 22:38 
user profile iconnitschchedu hat folgendes geschrieben:
Hey Savage,
kannst du mir das ganze Projekt Posten? ich will das auch in der art machen doch leiter ist es mir noch nicht vergönnt.

würd mich auch interessieren, würd mich da über post sehr freuen.


ok packages ist das stichwort :D dann gehts :)