2009-12-21 61 views
1

我在一個DLL中定義了一個類,並且某個成員被重載。 第二個DLL導入該類,從中繼承並導出繼承的類。繼承的類重寫上述成員的重載之一,因此會丟失所有其他重載。`使用`聲明兩個DLL

此問題的解決方案AFAIK一般使用using語句(using BaseClass::OverloadedMember;),但考慮到這種情況,我得到一個error C2487: 'BaseClass::OverloadedMember' : member of dll interface class may not be declared with dll interface(VC++)。

我該如何解決這個問題?

回答

1

嗯,我不能測試細節,因爲我沒有VC++,但有一種方法是在基類中重新定義所有重載方法並分別導出它們。

請記住,VC++的導入/導出從來沒有被認爲適用於C++。所以你應該保持導出的類在C++特性方面簡單(並且爲了這個目的,using陳述太複雜了)。

2

我會從新的DLL /類導出所有版本的重載函數。因此,而不是使用using語句來公開基類版本,因爲在這種情況下您不需要更改它們,所以我將實現顯式調用基類版本的簡單轉發函數。我希望這可以解決您遇到的問題;但這並不理想。