![]() |
dll automatisch einbinden...
hi ^^.. und schonwieder hab ich ein problem haha..
ich möchte plugins automatisch an meinem programm einbinden.. aus ![]() 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 :P |
Re: dll automatisch einbinden...
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. |
Re: dll automatisch einbinden...
hmmm hab mich mal bisschen erkundigt.. aber ich blick nicht so richtig durch..
kann mir mal jemand ein beispiel geben..? |
Re: dll automatisch einbinden...
ich glaube ich habs gleich.. doch meine versuche lassen sich nicht compilieren
Delphi-Quellcode:
geht nicht. kommt folgender fehler
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. Zitat:
Zitat:
beide versuche haben nix gebracht.. |
Re: dll automatisch einbinden...
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. |
Re: dll automatisch einbinden...
Zitat:
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? |
Re: dll automatisch einbinden...
Zitat:
Zitat:
Ich kenne die Eigenschaft Selected nicht, ich kenne bei einer TListBox nur ![]() Zitat:
|
Re: dll automatisch einbinden...
Zitat:
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz