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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage