Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Über DLL eine Funktion des aufrufenden Programmes ausführen (https://www.delphipraxis.net/84096-ueber-dll-eine-funktion-des-aufrufenden-programmes-ausfuehren.html)

cytrinox 11. Jan 2007 10:03


Ü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...

Luckie 11. Jan 2007 10:10

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.

cytrinox 11. Jan 2007 10:28

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?

Luckie 11. Jan 2007 10:31

Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
 
LoadLibrary sollte auch mit Exe-Dateien gehen. Ist ja schliesslich das gleiche Format.

shmia 11. Jan 2007 10:32

Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
 
Versuch mal:
Delphi-Quellcode:
handle := GetModuleHandle(nil);

cytrinox 11. Jan 2007 10:56

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.

Eichhoernchen 11. Jan 2007 11:09

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;

cytrinox 11. Jan 2007 11:18

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?

Luckie 11. Jan 2007 11:22

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: http://www.michael-puff.de/dirindex....elphi/Importe/

Eichhoernchen 11. Jan 2007 12:55

Re: Über DLL eine Funktion des aufrufenden Programmes ausfüh
 
Zitat:

Zitat von cytrinox
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?

Also ich hab es jetzt noch nie in einem Programm gemacht, aber ich würde es, wenn du mehrere Units hast, aus denen du Funktionen exportieren willst in den Programmsource packen oder aber ans Ende jeder Unit vor das end. bzw nach der letzten Funktion.
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 14:26 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