2014-11-24 99 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