AGB  ·  Datenschutz  ·  Impressum  







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

dll automatisch einbinden...

Ein Thema von napstar · begonnen am 3. Apr 2008 · letzter Beitrag vom 4. Apr 2008
Antwort Antwort
Benutzerbild von napstar
napstar

Registriert seit: 22. Mär 2007
Ort: München
133 Beiträge
 
Delphi 2007 Architect
 
#1

dll automatisch einbinden...

  Alt 3. Apr 2008, 21:57
hi ^^.. und schonwieder hab ich ein problem haha..

ich möchte plugins automatisch an meinem programm einbinden..
aus diesem tutorial habe ich gelernt, dass ich die dlls in einer unit in meinem programm laden muss.. nun können aber mehrere leute plugins für meinen programm schreiben und somit weiß ich nicht wie die plugins heißen und was die machen.

die plugins sind alle in einem unterordner gespeichert. diese sollen nun automatisch erkannt werden..

ich hoffe ihr habt mich verstanden.. da ich mich sehr schwer getahn hab das problem zu erleutern
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: dll automatisch einbinden...

  Alt 3. Apr 2008, 22:00
ist eigentlich ganz einfach. Einfach alle DLLs des Ordners auflisten. Das geht genau so wie das auflisten aller Dateien eines Ordners.
Diese Dateien kannst du dann dynamisch mit LoadLibrary laden und mit GetProcAddress kannst du schauen ob deine benötigten Funktionen drin sind.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von napstar
napstar

Registriert seit: 22. Mär 2007
Ort: München
133 Beiträge
 
Delphi 2007 Architect
 
#3

Re: dll automatisch einbinden...

  Alt 3. Apr 2008, 22:31
hmmm hab mich mal bisschen erkundigt.. aber ich blick nicht so richtig durch..
kann mir mal jemand ein beispiel geben..?
  Mit Zitat antworten Zitat
Benutzerbild von napstar
napstar

Registriert seit: 22. Mär 2007
Ort: München
133 Beiträge
 
Delphi 2007 Architect
 
#4

Re: dll automatisch einbinden...

  Alt 3. Apr 2008, 23:08
ich glaube ich habs gleich.. doch meine versuche lassen sich nicht compilieren

Delphi-Quellcode:
unit readdll;

interface

uses windows;

type
  TSummenFunktion = function (Vlink: string) : string; stdcall;
  function decrypt(Vlink: string) : string;

implementation

function decrypt(Vlink: string) : string;
var SummenFunktion: TSummenFunktion;
    Handle: THandle;
begin
  Handle:=LoadLibrary(Form1.ListBox1.Selected);
  if Handle <> 0 then begin
    @SummenFunktion := GetProcAddress(Handle, 'decrypt');
    if @SummenFunktion <> nil then begin
      result := SummenFunktion(Vlink);
    end;
    FreeLibrary(Handle);
  end;
end;

end.
geht nicht. kommt folgender fehler
Zitat:
[Pascal Error] readdll.pas(17): E2003 Undeclared identifier: 'Form1'
[Pascal Error] readdll.pas(17): E2066 Missing operator or semicolon
[Pascal Error] readdll.pas(18): E2029 ';' expected but 'IF' found
[Pascal Error] readdll.pas(19): E2003 Undeclared identifier: 'SummenFunktion'
[Pascal Error] readdll.pas(19): E2064 Left side cannot be assigned to
[Pascal Error] readdll.pas(19): E2003 Undeclared identifier: 'Handle'
[Pascal Error] readdll.pas(21): E2003 Undeclared identifier: 'result'
[Pascal Error] readdll.pas(21): E2003 Undeclared identifier: 'Vlink'
[Pascal Error] readdll.pas(24): E2029 '.' expected but ';' found
[Pascal Warning] readdll.pas(25): W1011 Text after final 'END.' - ignored by compiler
[Pascal Fatal Error] main.pas(7): F2063 Could not compile used unit 'readdll.pas'
und wenn ich die Unit1 einbinde kommt ein anderer fehler..

Zitat:
[Pascal Fatal Error] main.pas(7): F2047 Circular unit reference to 'main'
main.pas ist das hauptformular

beide versuche haben nix gebracht..
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: dll automatisch einbinden...

  Alt 4. Apr 2008, 00:46
Die Units können sich nicht gegenseitig einbinden, dann läuft der Compiler im Kreis. Trag einfach die Unit1 in die Uses Liste vom Implementation Teil der readdll unit ein.

Und grundsätzlich: Ich würde niemals fest auf die globale Form1 Variable zugreifen. Und selbst wenn es sich nicht vermeiden lässt, würde ich niemals irgendwelche Komponenten der Form direkt ansprechen bzw. auswerten. Die ListBox wäre tabu, es geht mich in einer anderen Unit nichts an, was da selektiert ist. Entweder ermittelt das die TForm1 selbst und fordert den Benutzer entsprechend auf eine Auswahl zu treffen, wenn keine besteht bzw. übergibt den selektierten Eintrag in einem Aufruf der anderen Unit. Und selbst wenn dies nicht gehen würde, dann würde ich eine Methode erstellen in TForm1 und die macht dieses und gibt den ausgewählten Eintrag zurück.
  Mit Zitat antworten Zitat
Benutzerbild von napstar
napstar

Registriert seit: 22. Mär 2007
Ort: München
133 Beiträge
 
Delphi 2007 Architect
 
#6

Re: dll automatisch einbinden...

  Alt 4. Apr 2008, 11:10
Zitat von Muetze1:
Die Units können sich nicht gegenseitig einbinden, dann läuft der Compiler im Kreis. Trag einfach die Unit1 in die Uses Liste vom Implementation Teil der readdll unit ein.

Und grundsätzlich: Ich würde niemals fest auf die globale Form1 Variable zugreifen. Und selbst wenn es sich nicht vermeiden lässt, würde ich niemals irgendwelche Komponenten der Form direkt ansprechen bzw. auswerten. Die ListBox wäre tabu, es geht mich in einer anderen Unit nichts an, was da selektiert ist. Entweder ermittelt das die TForm1 selbst und fordert den Benutzer entsprechend auf eine Auswahl zu treffen, wenn keine besteht bzw. übergibt den selektierten Eintrag in einem Aufruf der anderen Unit. Und selbst wenn dies nicht gehen würde, dann würde ich eine Methode erstellen in TForm1 und die macht dieses und gibt den ausgewählten Eintrag zurück.
gut zu wissen.. aber da ich ja noch mit delphi ziemlich am anfang stehe, weiche ich zur einfachsten methode aus ^^.. aber wie sollte ich es denn deiner meinung nach machen.. irrgendwie muss ich doch an die daten rankommen..
und noch ne kleine frage: ich habe bemerkt, dass ich der listbox bei diesem befehl einen integer mitgeben muss.. ListBox1.Selected
dann würde ja ich ja selbst ein item markieren.. gibt es eine methode zu erkennen, welches item selektiert ist?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: dll automatisch einbinden...

  Alt 4. Apr 2008, 18:56
Zitat von napstar:
aber wie sollte ich es denn deiner meinung nach machen.. irrgendwie muss ich doch an die daten rankommen..
Habe ich zuvor doch ausgeführt...

Zitat von napstar:
und noch ne kleine frage: ich habe bemerkt, dass ich der listbox bei diesem befehl einen integer mitgeben muss.. ListBox1.Selected
In wie fern einen "Integer mitgeben"?

Ich kenne die Eigenschaft Selected nicht, ich kenne bei einer TListBox nur Delphi-Referenz durchsuchenItemIndex

Zitat von napstar:
dann würde ja ich ja selbst ein item markieren.. gibt es eine methode zu erkennen, welches item selektiert ist?
Ob du das festlegst oder es nur ausliest hängt nur davon ab, ob du die Eigenschaft beschreibst oder nur liest.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: dll automatisch einbinden...

  Alt 4. Apr 2008, 19:42
Zitat:
Ich kenne die Eigenschaft Selected nicht, ich kenne bei einer TListBox nur
Er hat wohl einen quelltext von VB übersetzt ...
In Delphi gibts das nicht es sei denn es ist eine selbst erstellte Componente.

EDIT:

Nebenbei würde ich der DLL ein export zuweisen der in 'jeder' DLl vorhanden sein muss
Damit nicht plugins eingeladen werden welche den nicht unterstützen.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort


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:42 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