C++ 在C+中使用extern+;动态链接库
我声明,然后在DLL中实例化一个静态变量C++ 在C+中使用extern+;动态链接库,c++,windows,dll,static,extern,C++,Windows,Dll,Static,Extern,我声明,然后在DLL中实例化一个静态变量 // DLL.h class A { //... }; static A* a; // DLL.cpp A* a = new A; 到目前为止,一切都很好。。。有人建议我使用extern而不是static extern A* a; // in DLL.h 这没有问题,但是必须在某个地方声明extern变量。我得到了无效的存储类成员 换句话说,我以前做的是在源文件中声明一个变量,如下所示: // In src.cpp A a; 然后
// DLL.h
class A
{
//...
};
static A* a;
// DLL.cpp
A* a = new A;
到目前为止,一切都很好。。。有人建议我使用extern
而不是static
extern A* a; // in DLL.h
这没有问题,但是必须在某个地方声明extern
变量。我得到了无效的存储类成员
换句话说,我以前做的是在源文件中声明一个变量,如下所示:
// In src.cpp
A a;
然后extern
在同一项目的另一个源文件中声明它:
// In src2.cpp
extern A a;
因此,它在链接时是同一个对象。也许这不是正确的做法
那么,在哪里声明现在是extern的变量呢
请注意,我使用静态声明是为了在加载dll后立即查看实例化的变量
请注意,当前使用的
static
大部分时间都有效,但我认为在变量实例化中观察到延迟或类似情况,而它应该始终在加载时实例化。我正在调查这个问题一个星期了,我找不到任何解决办法。无论哪种方式,这都是一种可怕且不安全的单身方式。使用私有静态变量和函数访问它。例如(我从来没有见过在C++中使用extern
)嗯,实际上,这并不是我处理单例的方式。。。但我们必须为特定的目的编写代码。无论如何,我想我的问题不会用这些问题来解决。这可能比我在这里解释的要复杂得多。无论如何,谢谢你。