AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Autoerstellung einer Form beim Laden einer DLL

Autoerstellung einer Form beim Laden einer DLL

Ein Thema von Memnarch · begonnen am 9. Sep 2011 · letzter Beitrag vom 9. Sep 2011
Antwort Antwort
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

Autoerstellung einer Form beim Laden einer DLL

  Alt 9. Sep 2011, 11:32
Tag allerseits,
Ich habe ne dll, wenn die geladen wird, soll automatisch eine Form erstellt und angezeigt werden(egal ob es mein programm gewollt hätte oder nicht). Man stelle sich z.B. ne LogConsole vor die geladen wird und sich selbst automatisch anzeigt.(JA ich will es automatisch)

Irgend wann vor anotuk hab ich das mal hinbekommen, aber jetzt weiß ich nicht mehr wie v.v.

Mein problem:

Ich erstelle meine Form, sag ihr sie soll sich anzeigen, und das tut sie auch. Aber nur für wenige ms. Dann verschwindet sie sofort wieder.

Zum test hab ich einen Dialog nach dem ShowAufruf meiner form plaziert. Jetzt bleibt die form solange sichtbar bis der dialog geschlossen wird.

Woran liegt dass?

PS: Ja ich kann bei mir in der DLL Application nutzen.

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Autoerstellung einer Form beim Laden einer DLL

  Alt 9. Sep 2011, 11:36
Ich habs grad mal getestet:
DLL:
Delphi-Quellcode:
uses
  SysUtils,
  Classes,
  Unit66 in 'Unit66.pas{Form66};

{$R *.res}

begin
  TForm66.Create(nil).Show;
end.
Programm:
Delphi-Quellcode:
procedure TForm67.FormCreate(Sender: TObject);
begin
  LoadLibrary('project37.dll');
end;
Funzt super. Das Formular bleibt bestehen.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: Autoerstellung einer Form beim Laden einer DLL

  Alt 9. Sep 2011, 11:39
Mh, dann liegtes vllt daran dass ich versuche das ding ber DLL injection in mein programm zu werfen o.O(JA schlagt mich, das hatte ich oben nicht erwähnt, thsculdigung )
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.181 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Autoerstellung einer Form beim Laden einer DLL

  Alt 9. Sep 2011, 11:47
Versuch alles in einem eigenen Thread su machen. DLL+VCL laden und die Form erstellen.
Außerdem braucht dieser Thread noch eine Message-Loop (Application.ProcessMessages aufrufen), denn irgendwo müssen die VCL/Window-Messages ja verarbeitet werden.

Wenn das Hauptprogramm auch eine VCL besitzt, dann kommen sie sich sonst womöglich in die Quere.

Oder eben alles NonVCL erledigen, aber die NonVCL-Form im Hauptthread der Anwendung erstellen, ansonsten ebenfalls eine Message-Loop im erstellenden Thread.



Messages sind threadabhängig ... abhängig vom Thread, in welchem ein Win-Control erstellt wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: Autoerstellung einer Form beim Laden einer DLL

  Alt 9. Sep 2011, 12:06
Wie mach ich den eine NonVCL Form o.O?

Und nach dem inject sollte meine DLL im selben thread laufen, oder nicht?
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.181 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Autoerstellung einer Form beim Laden einer DLL

  Alt 9. Sep 2011, 12:13
Ausgeführte Funktionen laufen immer in dem Thread, von wo sie getartet wurden.
DLL und Initialization laufen in dem Thread, welcher die DLL läd.

MSDN-Library durchsuchenCreateWindow? (einfacvh mal bei Luckie auf der Webseite umschauen)

PS: mein FileSplitter ist auch NonVCL, allerdings verwendet er für die "Forms" Dialoge, welche aus einer vorgefertigten Ressource geladen werden.
Bei Luckie (und Hier im Forum suchenNonVCL) findest du vorwiegend Beispiele, wie man eine Form zur Laufzeit zusammenbaut/erstellt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#7

AW: Autoerstellung einer Form beim Laden einer DLL

  Alt 9. Sep 2011, 13:41
Ich hatte mal das Problem, als ich in der Form, die in der DLL angezeigt wird, einen TIdTCPServer hatte und in dessen Execute-Methode (ich Idiot) auf die Form zugegriffen habe.

Nachdem ich alles auf Messages umgestellt hatte, funktionierte es super.

Nachdem ich damals aus dem Koma erwacht bin, in das ich fiel, als ich (weil es nicht funktionierte), hab ich mit einer DLL angefangen, die nur ein Formular anzeigt und dann stückweise die Funktionalität hinzugefügt. Na ja, dann war mir klar woher der Wind weht.

Die DLL ist heute als Plugin im Einsatz, das eine Messagebox hochpoppen lässt und eine Nachricht anzeigt, die per TCP verschickt wurde.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf