两个DLL中的静态成员C++
我有一个静态成员的类,成员的定义在cpp文件中。两个DLL中的静态成员C++
我必须使用成员相同的定义在两个不同的DLL,所以我需要在这两个项目为编辑CPP的定义。这是制作一个新的成员版本。这意味着cpp被编译在两个地方,它将有两个定义。
我怎么能在这两个DLL只有一个定义。 或者我做错了什么,或者我错过了什么?
在.H
class qwerty
{
public:
static xyz* abc;
};
在的.cpp
xyz* qwerty::abc = new xyz();
而且在这两个DLL我包括.H,我需要和在.cpp在项目联系在一起。
谢谢。
解决办法是,该静态成员包装到,可提供它的静态成员函数。像这样:
class qwerty
{
public:
static xyz* get_abc();
};
中(仅在DLL)cpp文件
:
xyz* qwerty::get_abc() {
static xyz inst;
return &inst;
};
这是很好的旧时尚迈尔斯单身风格。
N.B:我希望我没有告诉你身边掠过C++对象或导出类通过模块边界的ABI相关的危险,对不对?
不幸的是,这也不起作用 - 编译器需要在内部跟踪变量是否已初始化,并且该跟踪也将在每个DLL中重复。 – 2014-11-24 23:21:08
但是...如果函数本身放在* third * DLL中,这可以工作。 – 2014-11-24 23:32:48
第三个DLL工作!谢谢! 我确实只有一个DLL,但它的工作原理。 – user3842408 2014-11-25 21:16:39
您可以使用共享内存在两个模块之间共享数据:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx – PaulMcKenzie 2014-11-24 22:56:23
@PaulMcKenzie wouldn' t阻止你运行该程序的多个实例? – 2014-11-24 23:30:08