2

我正在玩 Visual Studio,但发现了一个我无法理解的错误。我创建了一个导出类的 DLL;如果我创建另一个 DLL 项目并尝试使用第一个 DLL 类作为成员变量,则它不起作用,具体取决于我如何声明它。

这是第一个 DLL 类:

class LOCKING_API CCriticalSection {
public:
    CCriticalSection(void);
    ~CCriticalSection(void);
    void Enter(void);
    void Leave(void);
    BOOL TryEnter(void);
private:
    CRITICAL_SECTION CriticalSection;
};

在第二个 DLL 中:

#include "../Locking/Locking.h"

class APPLICATION_API CApplication {
public:
    static CApplication* instance(void);
private:
    CApplication(void);
    static CApplication* pInstance;
    static CCriticalSection CritSect;
};

如果我尝试编译我会得到错误:

Application.obj : error LNK2001: unresolved external symbol "private: static class CCriticalSection CApplication::CritSect" (?CritSect@CApplication@@0VCCriticalSection@@A)
4

1 回答 1

0

您可能没有初始化CApplication. 在您的一个 cpp 文件中,具有:

CCriticalSection CApplication::CritSect;

(当然,对 做同样的事情pInstance

编辑:

另一种可能性是您没有在第二个 DLL 的项目中链接到第一个 DLL 的 lib 文件。如果是这种情况,编译器会看到CCriticalSection的声明,但链接器找不到它的实现。请参阅.Lib 文件作为链接器输入

于 2012-06-18T19:48:52.663 回答