包含要共享的類的項目應導出其符號。在Visual Studio中創建DLL項目時,您可以選擇「導出」符號,並提供一些鍋爐代碼供您使用。
從本質上說,在你的庫頭文件,它會給你:
// myapi.h
#if defined(MYAPIEXPORTS)
#define MYAPI __declspec(dllexport)
#else
#define MYAPI __declspec(dllimport)
#endif
「MYAPIEXPORTS」是由嚮導提供的,但它是一個編譯器的預處理指令只能在庫本身。因此,當您編譯庫時,MYAPI
用於導出,並且當頭文件包含在其他項目中時,它將用於導入。
現在讓我們看看你想要分享的課程。
// myclass.h
class MYAPI MyClass
{
public:
MyClass();
~MyClass();
};
// myclass.cpp
#include "myClass.h"
MyClass::MyClass() { /* ... */ };
MyClass::~MyClass() { /* .... */ }
你的其他項目則需要與被生成的結果的.lib文件鏈接。
請注意,如果您有一個template<>
類完全包含在頭文件中,則不會導出它。這將表現得像你的枚舉和typedefs。
要回答你的問題的第二部分,是的,你的庫中定義的單例也可以被主項目訪問。
圖書館呢? –