003
11.10.2018, 03:25 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
hi,
extern "C" ist btw nicht nötig, wenn du die DLL per Header+Lib verwendest, C-Interface für DLLs ist nun schließlich inzwischen auch schon "etwa" 1980.
Visual Studio erzeugt einem bei DLL Projekten automatisch ein Define "PROJEKT"_EXPORTS
du kannst auch Klassen exportieren, Beispiel-Projekt "MYCPPDLL"
C++: |
#ifdef _WIN32 #ifdef MYCPPDLL_EXPORTS #define MYCPPDLL_API __declspec(dllexport) #else #define MYCPPDLL_API __declspec(dllimport) #endif #else #define MYCPPDLL_API #endif
class MYCPPDLL_API MyExportedClass { };
|
Nun kann man den Header einmal im DLL projekt selbst verwenden (mit MYCPPDLL_EXPORTS definiert). Und in einer anderen Anwendung/Lib/Dll (wodurch das Symbol von der DLL zuverlässig importiert wird)
Achso: zurück zu deiner Frage ;-)
Du kannst natürlich einen shared_ptr mit Interface benutzen, jedoch nicht mit "extern C", du brauchst dann halt eine art "CreateA"-Funktion (welche exportiert sein muss) die natürlich dein echtes A kennt, aber nur ein InterfaceA zurückgibt. Wie das genau geht: https://stackoverflow.com/questions/13403490/passing-shared-ptrderived-as-shared-ptrbase
Einzige was eben hier noch dazu kommt ist das dll exportieren/importieren -- class God : public ChuckNorris { }; Dieser Post wurde am 11.10.2018 um 03:28 Uhr von FloSoft editiert. |