Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Logging aus DLL heraus über CallBack ? (https://www.delphipraxis.net/126808-logging-aus-dll-heraus-ueber-callback.html)

moelski 2. Jan 2009 23:10


Logging aus DLL heraus über CallBack ?
 
Moin !

Wir ham da ein paar DLLs woraus wir gerne Logginginfos an die Hauptanwendung übergeben würden.
Im prinzip ist das Logging nix anderes als ein paar Strings.

Ist es nun möglich (evtl. über eine CallBack Funktion) aus der DLL heraus einen String an die Anwendung zu übergeben? Und in der Anwendung übergebe ich dann den String an unser Logging (SmartInspekt) ?
Im Prinzip könnte man die SmartInspekt Unit auch in der DLL verwenden, aber dadurch wächst die DLl von 100 auf 443KB. Das ist ein bisserl arg zuviel um ein paar Strings zu loggen wie ich finde ...

Wenn das über Callback geht, wäre das dann der umgekehrte Weg zu dem was hier dargstellt wurde?
http://www.delphipraxis.net/internal...t=dll+callback

Luckie 2. Jan 2009 23:12

Re: Logging aus DLL heraus über CallBack ?
 
Was Strings und DLLs angeht, guckt dir das http://www.michael-puff.de/Artikel/StringDLL.shtml mal an.

moelski 3. Jan 2009 09:01

Re: Logging aus DLL heraus über CallBack ?
 
Moin Michael,

danke für den Hinweis. Wir haben uns aber extra entschlossen die ShareMem zu nutzen. Denn wie hast du so schön geschrieben:
Zitat:

...Will man es sich unter Delphi einfach machen und ist die DLL auch in Delphi geschrieben...
Wir werden das Interface für die DLLs nicht bekannt geben und insofern möchten wir aus unseren DLLs heraus auch ganz normal mit Strings arbeiten können. Ob das nun besser oder schlechter ist sei mal dahingestellt.

Kannst du (oder jemand anderes) mir denn noch einen Tip geben bezüglich der Callback Funktion?

Ich habe hier noch eine Info gefunden: http://www.delphi-forum.de/viewtopic.php?p=386566
Aber das scheint nicht alles zu sein was man für die Umsetzung braucht.

Um der Sache auf den Grund zu gehen habe ich mal alles auf das Nötigste reduziert.
In meiner DLL habe ich folgende Definition:
Delphi-Quellcode:
PFNCallBack = Procedure (); stdcall;
Und folgenden Code:
Delphi-Quellcode:
Procedure MyCallBack(ACallBackFunc: PFNCallBack); stdcall;  
begin
  if Assigned(ACallBackFunc) then begin //schauen ob Funktion verfügbar ist....ja ist sie
    try
      ACallBackFunc();
    except
      //
    end;
  end;
end;
Und in meinem normalen Programm habe ich das hier:
Delphi-Quellcode:
procedure MyCallBack(); stdcall;
begin
  ShowMessage('Geht' );
end;
Das ist ja letztlich die Procedure die ich aus meiner DLL raus aufrufen möchte.

Aber so einiges ist mir da noch nicht klar.
  • Wie muss ich die Procedure im Hauptprogramm bekannt machen?
  • Muss ich die Procedure im Hauptprogramm auch irgendwie "exportieren"?
  • Wie rufe ich in der DLL letztlich meine Callback Procedure auf? Vermutlich mit MyCallBack(????). Aber was übergebe ich da?

Hoffe jemand kann da noch etwas lichten :cyclops:

mkinzler 3. Jan 2009 09:10

Re: Logging aus DLL heraus über CallBack ?
 
Zitat:

# Wie muss ich die Procedure im Hauptprogramm bekannt machen?
Sie ist doch im Hauptprogramm deklariert
Zitat:

# Muss ich die Procedure im Hauptprogramm auch irgendwie "exportieren"?
Nein, du übergibst sie ja an die Funktion in der Dll
Zitat:

# Wie rufe ich in der DLL letztlich meine Callback Procedure auf? Vermutlich mit MyCallBack(????). Aber was übergebe ich da?
Ja

moelski 3. Jan 2009 09:17

Re: Logging aus DLL heraus über CallBack ?
 
Moin !

Zitat:

Zitat:
# Wie muss ich die Procedure im Hauptprogramm bekannt machen?
Sie ist doch im Hauptprogramm deklariert
Nein im Moment ist es nur eine Procedure in meiner Hauptanwendung.

Aber vermutlich habe ich da noch ein Verständnisproblem ...
Funktioniert das ganze Konstrukt so:
-> Hauptprogramm übergibt der DLL einen Pointer auf die eigene Procedure (um sie in der DLL bekannt zu machen)
-> Und dann greife ich über diesen Pointer aus meiner DLL raus auf die Procedure zu?

Sehe ich das richtig das dann dieses Beispiel genau auf meinen Fall zutreffen würde?
http://www.delphi3000.com/articles/article_2362.asp?SK= :gruebel:

mkinzler 3. Jan 2009 09:25

Re: Logging aus DLL heraus über CallBack ?
 
Zitat:

-> Hauptprogramm übergibt der DLL einen Pointer auf die eigene Procedure (um sie in der DLL bekannt zu machen)
-> Und dann greife ich über diesen Pointer aus meiner DLL raus auf die Procedure zu?
Genauso funktioniert es

moelski 3. Jan 2009 09:39

Re: Logging aus DLL heraus über CallBack ?
 
Moin !

Ahaaaa :thumb:
Prinzip verstanden, umgesetzt und funktioniert.

Danke an alle !

sirius 3. Jan 2009 09:48

Re: Logging aus DLL heraus über CallBack ?
 
Wenn du die DLL sowieso nur aus Delphi heraus verwenden willst ist ein "stdcall" überflüssig.

moelski 3. Jan 2009 10:02

Re: Logging aus DLL heraus über CallBack ?
 
Moin !

Zitat:

Wenn du die DLL sowieso nur aus Delphi heraus verwenden willst ist ein "stdcall" überflüssig.
Das ist jetzt überflüssig da ich die DLL dynamisch lade. Der Teil ist schon Geschichte ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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