Ich hab den Fehler...
|
C-/C++-Quelltext
|
1
|
#ifdef DLLTEST_EXPORTS
|
statt
|
C-/C++-Quelltext
|
1
|
#ifdef DLL_EXPORTS
|
:roll:
mfg CBenni::O
Der eigentliche Fehler war, das du DLL_EXPORTS nicht definiert hast. Was da steht ist nämlich vollkommen egal, wichtig ist, dass das Makro definiert ist wenn etwas exportiert werden soll. PROJEKTNAME_EXPORTS ist bei Visual Studio, pro Dll-Projekt, einfach nur standardmäßig definiert.
Mmh... Nochmal ich...
Hat alles wunderbar geklappt, aber bei meiner Klasse kommt eine Warnung:
1>d:\benny\cpp\visualcpp\dlltest\dlltest\DllTest.hpp(17) : warning C4091: '__declspec(dllexport)': Ignoriert auf der linken Seite von 'CRaumschiff', wenn keine Variable deklariert wurde
Die Datei DllTest.hpp nochmal:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#ifdef DLLTEST_EXPORTS
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
DLL void message();
DLL class CRaumschiff
{
public:
CRaumschiff();
void Flieg();
void SetI(int n);
private:
int i;
};
|
EDIT: Hat sich geklärt... wenn man DLL und class vertauscht, klappt es...
Steht ja auch so in der Dokumentation: http://msdn.microsoft.com/de-de/library/a90k134d%28VS.80%29.aspx
Wieso ist es bei den Funktionen Genau andersherum? ich meine:
|
C-/C++-Quelltext
|
1
2
|
DLL void message();
class DLL CRaumschiff
|
Danke
mfg CBenni::O
Weil __declspec(dllexport/dllimport) vorgestellt
ein Objekt der Klasse XYZ exportieren würde. Daher auch die Warnung:
|
C-/C++-Quelltext
|
1
2
3
4
|
__declspec(dllexport) class foo {}; // wenig sinnvoll
__declspec(dllexport) class foo {} x; // exportiert 'x'
class __declspec(dllexport) foo {}; // exportiert das Interface (was zu Einschränkungen führt)
__declspec(dllexport) void message(); // exportiert die Funktion 'message'
|