2 Stimmen

C++ Compiler unabhängige DLLs mit abstrakter Schnittstelle

Ich habe den Leitfaden auf CodeProject befolgt und eine DLL mit einer abstrakten Schnittstelle erstellt und die Factory-Funktionen mit dem Befehl extern "C" zusammen mit __declspec(dllexport) und __cdecl exportiert. Dadurch wird laut dem Artikel die DLL compilerunabhängig mit einer klaren Schnittstelle. Wenn jedoch die DLL auf zwei verschiedenen Versionen von g++ verwendet wird, führt die nicht standardmäßige ABI zu standardmäßigen c++-Problemen bei DLL-Aufrufen. Zusätzlich zu dem CodeProject-Artikel habe ich auch einen Artikel von MinGW verwendet, um mehrere Instanzen der Klasse erstellen zu können.

Wie ist es dann möglich, die DLL compilerunabhängig zu machen? Und wenn dies nicht möglich ist, ist es dann möglich, eine Klasse innerhalb einer DLL zu instanziieren und die Funktionen rein in C zu machen, aber die mit der instanziierten Klasse verbundenen C++-Funktionen aufzurufen?

0voto

Ulrich Eckhardt Punkte 16066

Haben Sie versucht, das Beispiel genau so wie dort angegeben nachzustellen? Und was war das Problem? Sie müssen bedenken, dass nicht nur Ihre Klasse, sondern auch jede andere Klasse wie std::string nicht direkt verwendet werden kann. Aus diesem Grund würde ich nicht versuchen, das Rad neu zu erfinden, sondern irgendeine Art von Komponentenframework wie COM zu verwenden.

Um Ihren zweiten Teil zu beantworten, überlegen Sie das Folgende:

// interne Klasse
struct X
{
    void jump();
};

// Compiler-unabhängige C-Schnittstelle
struct X;
struct X* x_alloc(void);
void x_jump(struct X* x, float height);
void x_free(struct X* x);

Dies funktioniert. Ich habe keine genaue Vorstellung davon, was genau Sie versucht haben und was für Sie nicht funktioniert hat, es gibt einfach nicht genug Informationen, um es zu sagen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X