AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mainform aus DLL laden?

Ein Thema von Hyperspacer · begonnen am 27. Dez 2008 · letzter Beitrag vom 15. Jan 2009
Antwort Antwort
Seite 2 von 2     12   
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#11

Re: Mainform aus DLL laden?

  Alt 13. Jan 2009, 16:16
Mit dem Handle mache ich das genau so wie von sunlight7 beschrieben.

Zitat von sirius:
procedure StartMainForm; //<--Hier ist der Fehler
Dankeschön! Jetzt funktioniert immerhin das

Allerdings findet GetProcAddress() meine procedure in der DLL nicht. Und ich weiß einfach nicht warum nicht... Schreibweisen stimmen überein. habes mal mit name bei den exports versucht, aber das ging auch nicht. Ich vermute dass ich wieder irgendetwas im aufbau der DLL vermurksthabe, sodass der exports bereich nicht als exports bereich verstanden wird.

Delphi-Quellcode:
library MainDLL;

uses
  windows,
  Forms,
  sysutils,
  unTIM4 in 'unTIM4.pas{MainForm};

{$R *.res}

procedure MainForm(appHandle : THandle); stdcall;
begin
  if appHandle = 0 then appHandle := GetActiveWindow;

  Application.Handle := appHandle;

  try
    with TMainForm.Create(Application) Do
      try
        ShowModal;
      finally
        free;
      end;
  except
    On E : exception Do Application.HandleException(E)
  end;
  Application.Handle := 0;
end;

exports
  MainForm;

begin
end.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Mainform aus DLL laden?

  Alt 13. Jan 2009, 16:28
Und die Namensdifferenz von "MainForm" (DLL) und getProcAddress(...,'StartApplication'); hast du aufgehoben?

Ansonsten kannst du auch in die ExportListe der DLL gucken (z.B. mit GExperts - PE Informationen), was da so drin steht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#13

Re: Mainform aus DLL laden?

  Alt 13. Jan 2009, 16:34
Also an dem DLL Code liegts wohl nicht, habe folgendes getestet, funkt wunderbar, bis auf das, das die Form kein Icon hat.
Nur würde ich den Export vllt nicht gerade MainForm nennen, vllt beisst sich der Name mit etwas

Delphi-Quellcode:
library Project1;

uses
  Forms,
  Windows,
  SysUtils,
  Classes,
  Unit1 in 'Unit1.pas{Form1};

procedure Test(AppHandle:THandle); stdcall;
begin
   Application.Handle:=appHandle;

   try
     with TForm1.Create(Application) do begin
        ShowModal;
        Free;
     end;
   except
     On E : exception Do Application.HandleException(E);
   end;
  Application.Handle := 0;
end;

exports Test;

begin
end.
Delphi-Quellcode:
program Project1;

uses
  Windows,
  Forms;

{$R *.RES}

   var Lib:Cardinal;
       Test:procedure(AppHandle:THandle); stdcall;
begin
  Application.Initialize;


   Lib:=LoadLibrary('Project1.dll');
   Test:=GetProcAddress(Lib, 'Test');
   If Assigned(Test) then Test(Application.Handle);

   // Grad zu faul um Ress frei zu gegeben

  Application.Run;
end.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#14

Re: Mainform aus DLL laden?

  Alt 13. Jan 2009, 16:51
// edit: Okay der Fehler ist so doof, das es schon wehtut. Ich hatte zwei dlls in meinem verzeichnis. und in dem programm habe ich immer auf die alte verwiesen, die ich gar nicht mehr verändert habe -.- echt DOOF.

Naja aber es wäre ja nicht mein Quelltext wenn nicht gleich wieder ein Fehler auftauchen würde. Aber den find ich wenigstens logisch. Wie ich ihn umgehe, ist jetzt die frage.
Ich möchte nicht wie sunlight7 forms einbinden um ein application-objekt zu erhalten.
momentan weise ich der zu erstellenden Form dads Handle meines Threads zu. Das führt zu einem Fehler. Ich kenn mich da ja bnicht aus, aber ich nehm mal an das Windows zwischen den Handles von Threads und Fenstern unterschiede macht

Delphi-Quellcode:
  DLL := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'tim4_MainDLL.dll'));

  If DLL <> 0 then
    begin
      @AMainForm := GetProcAddress(DLL, 'StartMainForm');
      If @AMainForm <> nil then
        AMainForm(GetCurrentThread);
    end;
Daher dann auch der Fehler:

Exceptiontyp: EOSError
Meldung: Systemfehler. Code: 1400. Ungültiges Fensterhandle.
Schade eigentlich.

Vorschläge?

edit2: ohne das ich der application in der dll ein neues handle zuweise geht es anscheinend. Kann die Form auch "bedienen" ohjne das irgendwelche fehler auftreten
Nur bisher habe ich überall gelesen das es probleme mit messages geben wird, daher traue ich dem nicht ganz. Aber sind Mausklicks nicht auch messages? und die funktionieren auf den Buttons der form ja..
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Mainform aus DLL laden?

  Alt 13. Jan 2009, 17:04
Die Warum-Stellen sind, weil Sunlight das Application-Objekt braucht, so wie es in der Hilfe Dokumentiert ist. Und dieses Objekt befindet sich in der Unit Forms.
Wenn du es anders machen willst, musst du dir das Application-Objekt genau ansehen.

Edit: "Es funktioniert nicht" ist keine Fehlerbeschreibung.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#16

Re: Mainform aus DLL laden?

  Alt 13. Jan 2009, 17:35
Also ne, ich brauch das Application Objekt sicher nicht

Aber im ernst, wenn Deiner DLL das Handle fehlt treten merkwürdige Dinge auf, so zB das die Einträge in der Taskleiste doppelt sind und sowas...
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Hyperspacer

Registriert seit: 23. Apr 2006
53 Beiträge
 
Delphi 7 Personal
 
#17

Re: Mainform aus DLL laden?

  Alt 15. Jan 2009, 11:17
Zitat von Sunlight7:
Aber im ernst, wenn Deiner DLL das Handle fehlt treten merkwürdige Dinge auf, so zB das die Einträge in der Taskleiste doppelt sind und sowas...
Ist das bei dir der Fall? Bei mir bisher nicht, aber das kann zufall sein, oder?
hmm ich werde es mal wieter probieren. Mal sehen ob bei mir ähnliches passiert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz