Exportieren statischer Daten in eine DLL
Ich habe eine DLL, die eine Klasse mit statischen enthältMitglieder. ich benutze__declspec(dllexport)
um von dieser Klasse Gebrauch zu machenMethoden. Aber wenn ich es mit einem anderen Projekt verknüpfe und versuche, es zu kompilieren, erhalte ich "ungelöste externe Symbol" -Fehler für die statischen Daten.
z.B. In DLL Test.h
class __declspec(dllexport) Test{
protected:
static int d;
public:
static void m(){int x = a;}
}
In DLL Test.cpp
#include "Test.h"
int Test::d;
In der Anwendung, die Test verwendet, rufe ich m () auf.
Ich habe auch versucht, __declspec (dllexport) für jede Methode separat zu verwenden, aber ich erhalte immer noch die gleichen Verbindungsfehler für die statischen Mitglieder.
Wenn ich die DLL (die .lib) mit dumpbin überprüfe, sehe ich, dass die Symbole exportiert wurden.
Beispielsweise gibt die App zum Zeitpunkt der Verknüpfung den folgenden Fehler aus:
1>Main.obj : error LNK2001: unresolved external symbol "protected: static int CalcEngine::i_MatrixRow" (?i_MatrixRow@CalcEngine@@1HA)
Aber die Mülltonne der .lib enthält:
Version : 0
Machine : 14C (x86)
TimeDateStamp: 4BA3611A Fri Mar 19 17:03:46 2010
SizeOfData : 0000002C
DLL name : CalcEngine.dll
Symbol name : ?i_MatrixRow@CalcEngine@@1HA (protected: static int CalcEngine::i_MatrixRow)
Type : data
Name type : name
Hint : 31
Name : ?i_MatrixRow@CalcEngine@@1HA
Ich kann nicht herausfinden, wie ich das lösen soll. Was mache ich falsch? Wie kann ich über diese Fehler hinwegkommen?
P.S. Der Code wurde ursprünglich für Linux entwickelt und die Kombination .so / binary funktioniert problemlos
BEARBEITEN: Im gegebenen Fall werden die statischen Variablen nicht direkt von der Anwendung referenziert, sondern die Methode wird eingebettet, da sie im Header enthalten ist. Ich konnte die Verbindungsfehler beheben, indem ich die Methoden in die CPP-Datei verschob.