2014-11-24 93 views
2

我有一个静态成员的类,成员的定义在cpp文件中。两个DLL中的静态成员C++

我必须使用成员相同的定义在两个不同的DLL,所以我需要在这两个项目为编辑CPP的定义。这是制作一个新的成员版本。这意味着cpp被编译在两个地方,它将有两个定义。

我怎么能在这两个DLL只有一个定义。 或者我做错了什么,或者我错过了什么?

在.H

class qwerty 
{ 
public: 
    static xyz* abc; 
}; 

在的.cpp

xyz* qwerty::abc = new xyz(); 

而且在这两个DLL我包括.H,我需要和在.cpp在项目联系在一起。

谢谢。

+0

您可以使用共享内存在两个模块之间共享数据:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx – PaulMcKenzie 2014-11-24 22:56:23

+0

@PaulMcKenzie wouldn' t阻止你运行该程序的多个实例? – 2014-11-24 23:30:08

回答

0

解决办法是,该静态成员包装到,可提供它的静态成员函数。像这样:

class qwerty 
{ 
public: 
    static xyz* get_abc(); 
}; 
中(仅在DLL)cpp文件

xyz* qwerty::get_abc() { 
    static xyz inst; 
    return &inst; 
}; 

这是很好的旧时尚迈尔斯单身风格。

N.B:我希望我没有告诉你身边掠过C++对象或导出类通过模块边界的ABI相关的危险,对不对?

+0

不幸的是,这也不起作用 - 编译器需要在内部跟踪变量是否已初始化,并且该跟踪也将在每个DLL中重复。 – 2014-11-24 23:21:08

+1

但是...如果函数本身放在* third * DLL中,这可以工作。 – 2014-11-24 23:32:48

+0

第三个DLL工作!谢谢! 我确实只有一个DLL,但它的工作原理。 – user3842408 2014-11-25 21:16:39