2016-06-16 5 views
2

haben wir eine Anwendung, die hauptsächlich aus 3 Hauptmodulen besteht.ob es richtig ist, die Anwendungsfunktion von der Bibliotheksfunktion aufzurufen?

Jetzt bin ich angewiesen, die 3 Module meiner Anwendung als 3 dynamische Bibliotheken zu ändern. Der Grund für diese Aktivität liegt darin, dass Änderungen in einem der Module den Freigabezyklus der anderen Module nicht beeinflussen.

Bis jetzt ist es gut für mich.

Aber das Problem ist, dass einige der Funktionen in der Anwendung (Executable) von den Bibliotheksdateien benötigt wird.

Also riefen sie die Funktion an, die in der Anwendung aus der Bibliotheksdatei geschrieben wurde. Ich kann dies nicht verdauen, weil Anwendung die Bibliothek aufrufen kann, aber wie Bibliothek die Anwendung aufrufen kann.

Da dies unsere interne Bibliothek ist, können wir dies tun, wie andere mich vorgeschlagen?

Antwort

2

Sie können eine SetCallback Art von Funktion von der Bibliothek haben, die einen Funktionszeiger nimmt. Sie rufen dies aus der ausführbaren Datei auf und übergeben einen Funktionszeiger, der in der ausführbaren Datei verfügbar ist. Die Bibliothek zeichnet die Adresse dieser Funktion auf und würde sie später aufrufen.

EXE:

void CallMe(int param); 

... 
SetCallback(Callme); 

Bibliothek:

void(*func_in_exe)(int); 

void SetCallback(void(*pf)(int)) 
{ 
    func_in_exe = pf;  
} 

void SomeLibraryFunction() 
{ 
if (func_in_exe != NULL) 
    (*func_in_exe)(100); 
} 

Wo SetCallbackvoid (*)(int) eine Funktion-Zeiger vom Typ erwartet. Diese Funktion würde eine globale/statische Variable desselben Typs aktualisieren.

Wenn Sie den neuesten C++ - Compiler haben, können Sie ihn in std::function Objekt umbrechen, vereinfachen Sie auch die Funktionszeiger-Syntax.

1

Sie benötigen eine Rückruffunktion.

Erstellen Sie eine Funktion in der Bibliothek, die einen Funktionszeiger als Parameter verwendet. Die Anwendung sollte dann diese Bibliotheksfunktion aufrufen und einen Zeiger an eine Funktion übergeben, die die Bibliothek speichern kann, um später aufgerufen zu werden.

Verwandte Themen