我正在使用 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)
最佳答案
您可能没有初始化 CApplication
的静态成员。在你的一个 cpp 文件中,有:
CCriticalSection CApplication::CritSect;
(当然,对 pInstance
做同样的事情)
编辑:
另一种可能性是您没有在第二个 DLL 的项目中链接到第一个 DLL 的 lib 文件。如果是这种情况,编译器会看到 CCriticalSection
的声明,但链接器找不到它的实现。参见 .Lib Files as Linker Input .
关于c++ - Visual Studio,C++,在另一个 DLL 导出类中使用 DLL 导出类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089729/