Frage

Was ist der richtige Weg, um eine C ++ Klasse aus einer DLL zu importieren? Wir verwenden Visual C ++.

Es gibt den dllexport / exports.def + Loadlibrary + GetProcAddress trifecta, aber es funktioniert nicht auf C ++ Klassen, nur C-Funktionen. Ist dies aufgrund von C ++ Name-Mangeln? Wie kann ich diese Arbeit machen?

War es hilfreich?

Lösung 2

Fand die Lösung unter http://www.codeproject.com/KB/DLL/ XDllPt4.aspx

Vielen Dank für Ihre Bemühungen Jungs und Mädchen

Andere Tipps

Sie müssen Folgendes hinzufügen:

extern "C"
{
...
}

Funktion Mangeln zu vermeiden.

Sie könnte prüfen, zwei einfache C-Funktionen zu schreiben:

SomeClass* CreateObjectInstace()
{
    return new SomeClass();
}

void ReleaseObject(SomeClass* someClass)
{
   delete someClass;
}

Mit dem nur die Funktionen verwenden, können Sie später hinzufügen / ändern Funktionalität Ihres Objektes erstellen / löschen. Dies wird manchmal ein Werk genannt.

ich normalerweise eine Schnittstelle Basisklasse deklarieren, diese Erklärung in meiner Anwendung verwenden, dann verwenden Sie Loadlibrary, GetProcAddress die Fabrik Funktion zu erhalten. Der Faktor gibt immer Zeiger des Interface-Typ.

Hier ist ein praktisches Beispiel, eine MFC-Dokument / Ansicht von einer DLL exportieren , dynamisch geladen

Sehen Sie sich diese Frage . Grundsätzlich gibt es zwei Möglichkeiten. Sie können die Klasse mit _dllexport markieren und dann verknüpfen mit der Importbibliothek und die DLL wird automatisch geladen. Oder wenn Sie die DLL dynamisch selbst laden möchten, können Sie die Fabrik Funktion Idee verwenden, die vorgeschlagen @titanae

dllexport / Dllimport funktioniert, legen Sie sich vor Ihren Klassennamen in der Header-Datei und Sie sind gut zu gehen.

Normalerweise wollen Sie in der DLL verwenden Dllexport und Dllimport in der EXE-Datei (aber man kann einfach überall verwenden Dllexport und es funktioniert, tut es ‚richtig‘ macht es tinily schneller geladen werden).

Natürlich, dass ist für Link-Time-Kompilierung. Sie können / delayload Linker Direktive es ‚dynamisch‘ zu machen, aber das ist wahrscheinlich nicht das, was Sie aus der Betreffzeile soll.

Wenn Sie wirklich ein Loadlibrary Stil Laden wollen, Sie gehen, um Ihre C ++ Funktionen mit „extern C“ Wrapper wickeln. Das Problem ist, weil der Name Mangeln, Sie in der voll verstümmelten Namen eingeben könnte und es würde funktionieren.

Die Abhilfen sind in der Regel eine C-Funktion zur Verfügung zu stellen, die einen Zeiger auf die richtige Klasse gibt - COM so funktioniert, wie es 4 C-Funktionen aus einer DLL exportiert die verwendet werden, in der DLL, die Interface-Methoden innerhalb des Objekts zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top