__declspec(dllimport)
bedeutet, dass der aktuelle Code ist mit die DLL, die Ihre Klasse implementiert. Die Elementfunktionen und statischen Datenelemente werden daher in der DLL definiert, und ihre erneute Definition in Ihrem Programm ist ein Fehler. Wenn Sie versuchen, den Code für die DLL zu schreiben, die diese Klasse implementiert (und damit die Elementfunktionen und statischen Datenelemente definiert), müssen Sie stattdessen die Klasse __declspec(dllexport)
markieren.
Es ist üblich, dafür ein Makro zu verwenden. Wenn Sie Ihre DLL erstellen, definieren Sie ein Makro BUILDING_MYDLL
oder ähnliches. In der Kopfzeile für MyClass
Sie dann haben:
#ifdef BUILDING_MYDLL
#define MYCLASS_DECLSPEC __declspec(dllexport)
#else
#define MYCLASS_DECLSPEC __declspec(dllimport)
#endif
class MYCLASS_DECLSPEC MyClass
{
...
};
Dies bedeutet, dass Sie die Header zwischen dem DLL gemeinsam nutzen können und die Anwendung, die die DLL verwendet.
Hier ist das entsprechende Zitat auf [Microsoft-Seite] (http://msdn.microsoft.com/de-de/library/8fskxacy.aspx): "__declspec (dllimport) ist optional auf Funktionsdeklarationen [...] Sie müssen jedoch __declspec (dllimport) für die importierende ausführbare Datei verwenden, um auf die öffentlichen Datensymbole und -objekte der DLL zuzugreifen. Beachten Sie, dass die Benutzer Ihrer DLL noch mit einer Importbibliothek verknüpfen müssen. " –