c++ - Visual Studio,C++,在另一个 DLL 导出类中使用 DLL 导出类

标签 c++ class dll import export

我正在使用 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/

相关文章:

c++ - 如何找到 Internet Explorer(IE) 缓存文件的完整路径?

PHP fatal error : Using $this when not in object context

c++ - 如何在调试和重新分发期间包含 DLL?

c# - 找不到方法 : 'System.IO.Stream Microsoft.TeamFoundation.VersionControl.Client.Item.DownloadFile()'

c++ - '+' 不能添加两个指针,而只是打印一个 int 和一个显式字符串?

java - OpenCV Android 人像模式全屏设置

c++ - 检查 C++11 枚举类的总顺序(如何实现 operator<)

C++ 类相互引用(=> 错误 + 字段 '...' 的类型不完整)

class - 类实例声明的解释

Java app通过JNI调用C++ DLL;如何最好地分配内存?