Heim  >  Artikel  >  Backend-Entwicklung  >  Wie exportieren Sie Klassen, die std::-Objekte enthalten, aus einer DLL?

Wie exportieren Sie Klassen, die std::-Objekte enthalten, aus einer DLL?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-09 22:23:02685Durchsuche

How do You Export Classes Containing std:: Objects from a DLL?

Exportieren von Klassen, die std::-Objekte enthalten, aus einer DLL

Wenn Sie versuchen, Klassen, die std::-Objekte enthalten, wie z. B. Vektoren oder Zeichenfolgen, aus einer DLL zu exportieren, müssen Sie Möglicherweise werden Warnungen angezeigt, dass eine DLL-Schnittstelle erforderlich ist. Diese Warnung wird ausgelöst, wenn der Compiler erkennt, dass Mitglieder komplexer Typen innerhalb der Klasse nicht explizit für den DLL-Export markiert sind.

Die Weiterleitungsdeklaration der Mitgliedstypen mit DLL_EXPORT kann das Problem teilweise beheben. Um jedoch einen ordnungsgemäßen Export von Mitgliedsfunktionen sicherzustellen, müssen die entsprechenden Klassen in ihrer Kompilierungseinheit auch als DLL_EXPORT gekennzeichnet sein.

Diese Anforderung ergibt sich aus der Tatsache, dass der Compiler nicht bestimmen kann, welche Methoden der Klasse von Clients verwendet werden der DLL_EXPORTed-Klasse. Daher wird erzwungen, dass alle zugänglichen Methoden exportiert werden müssen. In diesem Zusammenhang wird nicht empfohlen, die Warnung zu ignorieren und zu deaktivieren.

Um die Warnung für nicht DLL-exportierbare Mitglieder zu beheben, können die folgenden Ansätze in Betracht gezogen werden:

  • Deaktivieren Sie die Warnung: Dies ist für private Mitglieder oder Mitglieder geeignet, auf die Clients nicht zugreifen können.
  • Wrapper oder Indirektionsmethoden erstellen: Dies beinhaltet das Erstellen von DLL_EXPORT-Wrapper-Methoden oder das Erstellen von Indirektionsmethoden , wodurch die interne Implementierung effektiv vor Kunden verborgen wird.
  • Verwenden Sie PIMPL: Diese Redewendung trägt dazu bei, die Anzahl der extern sichtbaren Mitglieder zu reduzieren und das Problem zu minimieren.

In der Beispiel bereitgestellt: Forward-Deklaration der Vorlagenspezialisierung std::allocator mit DLL_EXPORT generiert eine Instanziierung der Template-Spezialisierung innerhalb der aktuellen Kompilierungseinheit. Dadurch werden die Methoden für std::allocator in der DLL erstellt, einschließlich ihrer Exporte. Dieser Ansatz ist jedoch nicht für konkrete Klassen geeignet, da er nur die Instanziierung von Vorlagenklassen unterstützt.

Das obige ist der detaillierte Inhalt vonWie exportieren Sie Klassen, die std::-Objekte enthalten, aus einer DLL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn