Von einer DLL aus eine Funktion im führenden Prozess aufrufen

CopWorker

Erfahrenes Mitglied
Hallo zusammen,

ist es möglich von einer DLL aus eine Funktion im führenden Prozess aufzurufen.
Und dann auch noch Parameter übergeben und einen Rückgabewert erwarten.

D.h. Ich habe ein Programm (*.exe) als führenden Prozess.
Dieses Programm benutzt eine DLL in der verschiedenen Informationen gesammelt werden.
Wenn die DLL die Informationen ausgewertet hat, soll sie den führenden Prozess über das Ergebnis informieren.
Im führenden Prozess soll ein Art Funktion aufgerufen werden in der die Übergabeparameter verwendet werden können.

Wie geht das?

Vielleicht kann mir jemand weiterhelfen.

Grüße von CopWorker
 

Zvoni

Erfahrenes Mitglied
Stichwort: Callback-Funktion
Du definierst in deinem führendem Prozess eine öffentliche Funktion (also eine, welche von "aussen" erreichbar ist), deren Adresse du an die DLL schickst (beim Start der DLL?).

Funktioniert im Prinzip wie ein Event-Handler
 

CopWorker

Erfahrenes Mitglied
Hallo Zvoni,

kann ich in C# eine Adresse einer Funktion verschicken?
Es gibt doch keine Pointer in C#.
Kannst du mir eine Code Beispiel schicken?

Vielen Dank.
Grüße von CopWorker
 

Zvoni

Erfahrenes Mitglied
In C# heissen die Delegates (glaube ich)
Delegates in C# - working with delegates in CSharp
C# callback from DLL

EDIT: Wenn ich mich recht erinner, dürfen Callbacks nur Prozeduren sein, und keine Funktionen (egal welche Sprache)
Im Falle von C# also void's
Die Übergabe-Parameter sind "frei" wählbar (wobei ich es bei basic types belassen würde (Integers. Strings u.ä.). Objekte/Klassen als Übergabe-Parameter ist immer so eine fürchterliche Sauerei.....)
 
Zuletzt bearbeitet:

CopWorker

Erfahrenes Mitglied
Hallo zusammen,

in der Dll rufe ich jetzt vom übergeordneten Programm die Funktion
C#:
public event StateExecuteHandler OnExecute
{
    lock (this)
        handle = value;
}
auf und setze eine "delegate" drauf.
Und damit komme ich an die Funktion des aufrufenden Programms ran.

Funktioniert auch mit Übergabeparametern und mit Rückgabewert.

Wenn´s geht dann geht´s
Vielen Dank für eure Beiträge
Grüße von CopWorker