Umgang mit MFC-Erweiterungs-DLL
-
Ich habe eine kurze Frage zum Umgang mit MFC-Erweiterungs-DLLs.
Ich habe eine solche erstellt. In der DLL wird eine Klasse definiert, die mittels AFX_EXT_CLASS auch exportiert werden kann. Jetzt habe ich in einer weiteren Headerdatei eine Funktion definiert, die keine Klassenzugehörigkeit hat. Wie kann ich diese exportieren? Muss ich dort über __declspec(ddlexport) gehen oder kann man auch das Makro AFX_EXT_CLASS verwenden? Zum Export einzelner Klassenmember geht es ja auch...
-
Wenn du das define AFX_EXT_CLASS zurückverfolgst, wird du merken, dass es auch einfach nur __declspec(dllexport) macht.
Siehe hier:
#define AFX_EXT_CLASS AFX_CLASS_EXPORT
und
#define AFX_CLASS_EXPORT __declspec(dllexport)
-
Source2702 schrieb:
Wenn du das define AFX_EXT_CLASS zurückverfolgst, wird du merken, dass es auch einfach nur __declspec(dllexport) macht.
Siehe hier:
#define AFX_EXT_CLASS AFX_CLASS_EXPORT
und
#define AFX_CLASS_EXPORT __declspec(dllexport)
Naja, nicht ganz wenn ich das jetzt richtig verstanden hab. Denn import deckt es ja auch ab. War daran gescheitert, dass ich nur den export definiert hatte. Da ich die gleiche Headerdatei für den Build der dll und auch im Zielprojekt, welches die dll läd, verwenden wollte muss für das dll-Projekt anscheinend auch der import definiert werden. AFX_EXT_CLASS macht ja beides:
#ifndef AFX_EXT_DATA #ifdef _AFXEXT #define AFX_EXT_CLASS AFX_CLASS_EXPORT #define AFX_EXT_API AFX_API_EXPORT #define AFX_EXT_DATA AFX_DATA_EXPORT #define AFX_EXT_DATADEF #else #define AFX_EXT_CLASS AFX_CLASS_IMPORT #define AFX_EXT_API AFX_API_IMPORT #define AFX_EXT_DATA AFX_DATA_IMPORT #define AFX_EXT_DATADEF #endif #endif
Oder hab ich das da falsch verstanden? Ich hab leider noch nicht so viel Erfahrung mit dlls...
-
Eine Extension DLL ist eigentlich nicht anders zu behandeln als eine normale DLL. Der Unterschied bestehtnurintern an der Integration der MFC Funktionen.
Alles was für norale DLLs gilt was exportieren von Klassen und Funktionen betrifft, dass gilt auch für Extension DLLs.