Funktionen einer Anwendung aus anderer heraus aufrufen.

Alles rund um die Programmierung mit Qt
Antworten
Eltharion
Beiträge: 74
Registriert: 4. Mai 2006 14:42
Wohnort: Magdeburg
Kontaktdaten:

Funktionen einer Anwendung aus anderer heraus aufrufen.

Beitrag von Eltharion »

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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Eltharion
Beiträge: 74
Registriert: 4. Mai 2006 14:42
Wohnort: Magdeburg
Kontaktdaten:

Beitrag von Eltharion »

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:

Code: Alles auswählen

extern "C" __declspec(dllexport) void OpenDialog()
{
  QMessageBox::information(0, "Information", "ok", QMessageBox::Ok);
}
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*
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Eltharion hat geschrieben:Ich glaube, ich schaue mir mal die kparts genauer an.
Ist auch nichts wirklich anderes als ein Plugin - aber Du brauchst nur ne Lib.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten