2016-11-03 2 views
0

Ich arbeite an einem Projekt, bei dem ich versuche, einige Komponenten zu modularisieren. Einer davon ist Windowing. Ich versuche jedoch, die Eingabe zurück an die Haupt-EXE zu übergeben, und zwar über eine Benutzerschnittstellenfunktion, die wiederum die Hauptmethoden in der Haupt-Eingabesystemklasse aufruft. Die letztere Klasse ist viel zu kompliziert, um sogar einen Header auf beiden Systemen verfügbar zu haben (hängt von vielen Klassen ab).Wie kann eine DLL auf eine EXE-Klasse zugreifen?

Wie auch immer, so ist das eigentliche Problem, dass ich auf keine Methoden in der Input-Interface-Klasse zugreifen kann!

Dies ist in meiner DLL/SO-Datei, und ich kann auf all dies zugreifen. Aber ich kann nicht auf die Mitglieder der Eingabe zugreifen. Bash stürzt ab mit Symbol Lookup-Fehler:

./bin/window.so: undefined symbol: _ZN14InputInterface16SetMouseInWindowEb 

Hat jemand irgendwelche Ideen zur Lösung dieses Problems? Mein Eingabe-Interface-Klassenheader ist auf beiden Seiten enthalten. Die Klasse enthält Void-Funktionen und wird nicht exportiert (ich weiß nicht, dass es sein kann. Wenn es exportiert werden soll, könnten Sie bitte zeigen, wie?) Vielen Dank im Voraus!

+1

Sie wahrscheinlich eine Plugin-Schnittstelle benötigen. –

+0

Der andere Benutzer, 1201ProgramAlarm, hatte die Schreibantwort, aber ich bin nicht wirklich sicher, was Sie damit meinen, und der Header von InputInterface befand sich in der ausführbaren Datei, auf deren Header in der ausführbaren Datei und der DLL verwiesen wurde . Das Problem wurde virtuell gelöst. –

Antwort

1

Sie können die Methoden, auf die Sie zugreifen möchten, virtuell von der DLL aus vornehmen. Wenn Sie dann einen aufrufen, wird die Funktion in der vtable (die in der EXE eingerichtet wurde) und nicht über einen exportierten Symbolnamen nachgeschlagen.

Dies erfordert, dass die EXE die Eingabeobjekte erstellt und an die DLL übergibt. Wenn die DLL ein Eingabeobjekt erstellen muss, benötigen Sie einen Faktor Methode aus der EXE-Datei exportieren und sie dynamisch zur Laufzeit finden mit Loadlibrary usw.

+0

Bestätigung: Jede Funktion virtuell machen, arbeiten, danke! –

Verwandte Themen