![]() |
Über DLL eine Funktion des aufrufenden Programmes ausführen
Hi,
folgendes Problem: Ich habe ein Programm und 2 DLL-Dateien. Die erste DLL-Datei läst sich mit eigenen Funktionen erweitern die man ebenfalls als DLL-Datei implementieren muss. D.h. Zuerst Programmstart -> DLL wird aufgerufen -> läd weitere DLL Datei. Auf die erste DLL Datei hab ich keinen Zugriff, die kommt von Crystal Reports. Die zweie schreib ich selbst. In meiner eignenen DLL-Datei brauche ich Informationen aus dem laufenen Programm. Das Programm stellt mir dazu eine Funktion bereit, getMyData(integer: id); WIe kann ich jetzt aus der DLL-Datei darauf zugreifen? Andersrum kennt man das ja, Programm läd DLL Datei, Programm such irgend eine Funktion, holt sich die Adresse und springt da hin. Aber geht das auch andersrum, so dass die DLL-Datei IM PROGRAMM SELBST eine Funktion sucht? Wichtig wäre mir ob ich meine Delphi-Funktion dann per export irgendwie freigeben muss usw... |
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
Also wenn das Programm die Funktion exportiert, sollte es genauso gehen wie mit einer DLL.
|
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
Jau, dachte ich mir schon, z.B. mit der Funktion getProcAddress().
Das Problem ist, dass diese einen Handle verlangt, den bekomme ich ja mit LoadLibrary(). Aber wie geht das mit dem laufenden Porgamm? Gibts da einen Default-Handle? |
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
LoadLibrary sollte auch mit Exe-Dateien gehen. Ist ja schliesslich das gleiche Format.
|
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
Versuch mal:
Delphi-Quellcode:
handle := GetModuleHandle(nil);
|
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
WIe genau muss ich die Funktion im Programm selbst deklarieren? so?
function machwas() : Integer; export; try FarProc := GetProcAddress(getModuleHandle(nil), 'machwas'); //if Assigned(FarProc) then FarProc(); except ShowMessage('Funktion der DLL konnte nicht ausgeführt werden.'); end; Funktioniert in der DLL leider nicht, der bringt nur die Fehlermeldung. |
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
ich glaube du musst sie unter exports schreiben, wie auch bei ner DLL.
sprich:
Delphi-Quellcode:
function machwas(): integer;
begin ... end; exports machwas; |
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
wo muss dieses exports stehen? muss das direkt in der unit sein?
oder besser gefragt: ich habs jetzt in der Programm-source Datei, so funktionierst. Ist das egal oder SOLLTE man es wo anders hinschreiben? |
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
Eventuell solltest du dich erstmal mit den Grundlagen beschäftigen, wie man eine DLL schreibt. Tutorial gibt es hier:
![]() |
Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
Zitat:
Ich weiß nicht was besser ist, mit den Units hat man vielleicht einen besseren überblick, was in welcher Unit exportiert wird jedoch siehst du im Programmcode direkt was alles exportiert wird, dass musst du wohl selbst wissen. Eichhoernchen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 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 by Thomas Breitkreuz