Ich möchte eine exportierte Funktion in einer exe als Einspungpunkt von Qt aus einer anderen exe heraus nutzen. Dazu ermittle ich mittels QLibrary::resolve() die Adresse, caste auf den Funktionsprototypen und rufe den Funktionspointer auf. Dabei stürzt im Moment die Anwendung ab. In der Funktion habe ich zu Testzwecken nur eine QMessageBox drin.
Ziel ist die Nutzung einer bestehenden Qt-Anwendung innerhalb einer anderen. Ich möchte Dialoge der Anwendung öffnen können, aber den ganzen Ballast von Werkzeugleisten, Docks, Menüs, usw. vermeiden. Eine separate, gemeinsam genutzte Bibliothek wollte ich eigentlich vermeiden. Denkbar wäre noch der Aufruf der exe mit gesondertem Parameter, aber auch das erscheint mir nicht ideal. Gibt es eine Möglichkeit, bestehende Routinen wie oben beschrieben aus anderen Anwendungen heraus zu nutzen? Muss ich dabei etwas beachten? Wie macht es z.B. KDEs KParts? Freue mich über jeden Tipp.
MfG, Gerrit
Funktionen einer Anwendung aus anderer heraus aufrufen.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
So wie Du das machen willst geht es nicht. Du musst eine Shared-Lib bauen die dann beide Applikationen nutzen. Alles andere ist nicht wirklich machbar,
Und das dein QLibrary::resolve() funktioniert bezweifel ich einfach mal - eine C++-Funktion wird nicht einfach mit dem Funktionsnamen exportiert sondern geht noch durch ein sogenanntes Name Mangeling. Und dies ist von Compiler zu Compiler unterschiedlich.
Und das dein QLibrary::resolve() funktioniert bezweifel ich einfach mal - eine C++-Funktion wird nicht einfach mit dem Funktionsnamen exportiert sondern geht noch durch ein sogenanntes Name Mangeling. Und dies ist von Compiler zu Compiler unterschiedlich.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Du hast Recht, C++ macht da seinen eigenen Murx, aber ich habe auch nicht geschrieben, dass ich C++ freie Hand gelassen hätte 
Mein Versuch sah etwa so aus:
Wird auch in der Hilfe so beschrieben. Was mich im Moment interessiert, ist, wie man es zum Laufen bringen könnte, da ich einen Haufen Anwendungen habe, die dadurch in einer Überanwendung nutzbar wären und ich nicht wirklich jede in eine DLL auslagern möchte. Ich glaube, ich schaue mir mal die kparts genauer an.
E*
Mein Versuch sah etwa so aus:
Code: Alles auswählen
extern "C" __declspec(dllexport) void OpenDialog()
{
QMessageBox::information(0, "Information", "ok", QMessageBox::Ok);
}
E*
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: