AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Über DLL eine Funktion des aufrufenden Programmes ausführen

Über DLL eine Funktion des aufrufenden Programmes ausführen

Ein Thema von cytrinox · begonnen am 11. Jan 2007 · letzter Beitrag vom 11. Jan 2007
Antwort Antwort
cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#1

Über DLL eine Funktion des aufrufenden Programmes ausführen

  Alt 11. Jan 2007, 11:03
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...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 11. Jan 2007, 11:10
Also wenn das Programm die Funktion exportiert, sollte es genauso gehen wie mit einer DLL.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#3

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

  Alt 11. Jan 2007, 11:28
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 11. Jan 2007, 11:31
LoadLibrary sollte auch mit Exe-Dateien gehen. Ist ja schliesslich das gleiche Format.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

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

  Alt 11. Jan 2007, 11:32
Versuch mal: handle := GetModuleHandle(nil);
Andreas
  Mit Zitat antworten Zitat
cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#6

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

  Alt 11. Jan 2007, 11:56
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.
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 11. Jan 2007, 12:09
ich glaube du musst sie unter exports schreiben, wie auch bei ner DLL.

sprich:

Delphi-Quellcode:
function machwas(): integer;
begin
...
end;

exports
 machwas;
Jan
  Mit Zitat antworten Zitat
cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#8

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

  Alt 11. Jan 2007, 12:18
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

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

  Alt 11. Jan 2007, 12:22
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/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#10

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

  Alt 11. Jan 2007, 13:55
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
Jan
  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 11:11 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